2017-06-02 3 views
0

Ich stehe derzeit vor einem Problem, bei dem ich versuche, eine WPF-Clientseite Teil einer unserer ersten DevForce-Entitäten zu machen. Das Problem ist, dass das Partial im WPF-Client scheinbar keinen Zugriff auf die Eigenschaften in seinen Geschwistern hat, die teilweise in dem Modellprojekt sind, auf das das Clientprojekt verwiesen hat.Clientseite partiell für DevForce Entität kann die in den Modellen partiell freigelegten Eigenschaften nicht sehen

Ich habe den gleichen Namespace sowohl im Client als auch im Modell verwendet, aber die Client-Seite kommt immer wieder zurück, da es sich um einen Teil mit nur einer einzigen Datei handelt.

Meine Hauptschlussfolgerung dafür ist, dass ich auf Eigenschaften einer statischen Klasse zugreifen muss, die sich in meinem Clientprojekt innerhalb einer Eigenschaft befindet, die ich der clientseitigen Entität Partial hinzufüge. Eine Probe davon folgt:

Modell Buddy Klasse:

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Security.Principal; 
using IbEm = IdeaBlade.EntityModel; 
using IdeaBlade.EntityModel.Security; 
using IdeaBlade.Validation; 

// ReSharper disable CheckNamespace 
namespace BearPaw.Models.Main 
{ 
[MetadataType(typeof(NavigationButtonGroupMetadata))] 
public partial class NavigationButtonGroup 
{ 

    [IbEm.AllowRpc] 
    public static object NameAlreadyInUse(IPrincipal principal, 
     IbEm.EntityManager entityManager, params Object[] args) 
    { 
     string buttonGroupNameToCheck = (string)args[0]; 

     var serverButtonGroup = entityManager.GetQuery<NavigationButtonGroup>().FirstOrDefault((u) => u.Name == buttonGroupNameToCheck); 

     return serverButtonGroup != null; 
    } 

} 

public class NavigationButtonGroupMetadata 
{ 
    [RegexVerifier("Name", @"^[A-Za-z_]*$")] 
    [StringLengthVerifier(MaxValue = 100, IsRequired = true, ErrorMessage = "Button Group Name must be unique")] 
    public static string Name; 
} 

} 

Client Side Teil:

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Security.Principal; 
using IbEm = IdeaBlade.EntityModel; 
using IdeaBlade.EntityModel.Security; 
using IdeaBlade.Validation; 

// ReSharper disable CheckNamespace 
namespace BearPaw.Models.Main 
{ 
[MetadataType(typeof(NavigationButtonGroupMetadata))] 
public partial class NavigationButtonGroup 
{ 
    public bool IsEnabled 
    { 
     get 
     { 
      { 
       if (NavigationButtonGroupType.AlwaysVisible || (DynamicMenuItemsHelper.MenuDetails != null && DynamicMenuItemsHelper.MenuDetails.Count() > 0)) return true; 
       var currentUser = Authenticator.Instance?.DefaultAuthenticationContext?.Principal?.Identity; 
       return currentUser != null && NavigationButtons. 
        Any(b => b.IsEnabled); 
      } 
     } 
    } 
} 
} 

Visual Studio Fehler auf NavigationButtonGroupType.AlwaysVisible kompilieren zeigt einen Objektverweis angegeben ist, für die erforderlich ist, nicht statisches Feld, obwohl NavigationButtonGroupType eine Nav-Prop für die Entität im Modell ist. Ein ähnliches Problem tritt auf, wenn NavigationButtons auch eine nav-Eigenschaft ist, Visual Studio jedoch angibt, dass es im aktuellen Kontext nicht vorhanden ist.

Jede Hilfe oder Hinweise, warum dies nicht funktionieren würde sehr geschätzt.

Vielen Dank

Lee

Antwort

0

Eine partielle Klassendefinition können Sie eine Klassendefinition über mehrere Dateien verbreiten, aber nur in der gleichen Baugruppe. Dies ist eine C# -Sache, keine DevForce-Einschränkung. Weitere Informationen finden Sie unter here.

Wenn ich richtig verstehe, wollen Sie einige Funktionen der Entitätsklasse nur auf dem Client (und einige auf dem Server auch?). Wenn Sie Client- und Servermodellprojekte definieren, können Sie mithilfe der bedingten Kompilierung bestimmen, welche Features der Entität in jeder Assembly verfügbar sind. Dies ist in DevForce SL-Anwendungen ziemlich Standard, obwohl es in WPF möglicherweise weniger verwendet wird.

Eine andere Option besteht darin, Eigenschaften wie diese in das ViewModel zu stellen, wenn Sie diese Art von Architektur verwenden.

+1

Hallo Kim, danke dafür. Ich glaube, ich habe mich aufgrund des folgenden Textes aus dem IdeaBlade DRC in die Irre geführt. "Ein saubererer und einfacherer Weg besteht darin, zusätzliche partielle Klassendateien entweder im .NET-Projekt oder im Client-Projekt zu erstellen und absichtlich nicht zu verknüpfen." Das ließ mich denken, dass es eine "geheime Soße" gab, die dies erlauben könnte. Dieser Code war für einige Navigationsstruktur, die ich hoffte, um eine ganze VM nicht zu schreiben, nur um die Struktur und die Entitäten zu halten, sieht aus, als ob ich neu denken muss, denke ich. Danke für die schnelle Antwort. –

Verwandte Themen