2017-06-02 7 views
0

現在、私はモデルの最初のDevForceエンティティのWPFクライアントサイドパーシャルを作成しようとしています。問題は、WPFクライアントの部分が、クライアントプロジェクトが参照しているモデルプロジェクト内の部分的な兄弟のプロパティにアクセスできないように見えることです。クライアントサイドパーシャルDevForceエンティティでモデルに公開されているプロパティが表示されない部分

私はクライアントとモデルの両方で同じ名前空間を使用しましたが、クライアント側は1つのファイルのみで部分的に戻ってきます。

私の主な理由は、クライアント側のエンティティPartialに追加するプロパティ内のクライアントプロジェクトにある静的なクラスのプロパティにアクセスする必要があることです。次のうちサンプル:

モデルバディクラス:一部

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; 
} 

} 

クライアント側:

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は、オブジェクト参照が要求される旨NavigationButtonGroupType.AlwaysVisibleにコンパイルエラーを示していますNavigationButtonGroupTypeはモデル内のエンティティのnav propであるにもかかわらず、非静的フィールドである必要があります。同様の問題はNavigationButtonsもnavプロパティですが、Visual Studioでは現在のコンテキストに存在しないことを示しています。

これがうまくいかない理由についての助けや助言をいただければ幸いです。

感謝

リー

答えて

0

は、部分的なクラス定義はなく、唯一の同じアセンブリで、複数のファイルの上にクラス定義を広げることができます。これはDevForceの制限ではなくC#のものです。詳細については、hereを参照してください。

私が正しく理解していれば、エンティティクラスのいくつかの機能をクライアント(およびサーバ上のものも)でのみ利用できます。クライアントおよびサーバーモデルプロジェクトを定義する場合は、条件付きコンパイルを使用して、各アセンブリでエンティティのどの機能を使用できるかを判断できます。これは、DevForce SLアプリケーションではかなり標準的ですが、WPFではあまり使用されません。

このタイプのアーキテクチャを使用している場合は、ViewModelにこのようなプロパティを設定することもできます。

+1

こんにちはKimさん、ありがとうございます。私はIdeaBlade DRCの次のテキストのおかげで私が誤解していたと思います。「.NETプロジェクトまたはクライアントプロジェクトに追加の部分クラスファイルを作成し、故意にリンクしないことがよりクリーンで簡単な方法です。 これは、これを可能にするいくつかの「秘密のソース」があると私に思い出させました。 このコードは、構造とエンティティを保持するためだけにVM全体を記述する必要がない、いくつかのナビゲーション構造用です。私が推測するように再考する必要があるかもしれません。早速のお返事ありがとうございます。 –

関連する問題