2009-04-13 10 views
8

Silverlight 3.0で.NET RIA ServicesとMVVMを使用すると、RIA ServicesのメタデータタイプとMVVMパターンのViewModelに違いがありますか?これらは同じものなのか、それとも別々に保つべきか?Silverlight 3.0で.NET RIA ServicesとMVVMを組み合わせる

メタデータ型は、部分的なEntityクラスの密封内部クラスです。そこでは適切な分離がないように見えますが、メタデータ型にValidationの属性を付けるとViewModelのように見えるようになります。

私は検索しましたが、これについて何も詳細に話していませんでした。

答えて

11

ChuckJと同意します - 通常、DomainContextはビューモデルの一部を形成します。たとえば、商品カタログに対して検索できる検索ページがあるとします。

サーバーの場合:ここで私は物事を構築したい方法です

class Catalog : DomainService { 
    IQueryable<Product> GetProducts(string keyword) { ... } 
} 

生成DomainContext:私は書くでしょう

class Catalog : DomainContext { 
    EntityList<Product> Products { get; } 
    void LoadProducts(string keyword); 
} 

ビューモデル:

class SearchViewModel { 
    Catalog _catalog = new Catalog(); 

    public IEnumerable<Product> Results { 
     get { return _catalog.Products; } 
    } 

    public void Search(string keyword) { 
     _catalog.Products.Clear(); 
     _catalog.LoadProducts(keyword); 
    } 
} 

そして、最後に私のxamlで、私はUserControlのDataContextをSearchViewModelのインスタンスに設定し、ItemsContrをバインドしますResultsプロパティに追加します。私はあなたの選択したViewModelパターンを使用して、ボタンクリックをSearch(これはSearchViewModelが公開するコマンド)にバインドします。私個人的に、私はのようにSilverlight.FXで作業をしているようなもの:

<Button Content="Search" 
    fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" /> 

ととして最初にhereを示します。

Chuckが言及しているように、私のビューモデルには、実際にはxboxのListBoxのSelectedItemに双方向でバインドされているSelectedProductなど、別の状態があります。選択した製品の詳細を表示するデータフォーム。

希望に役立ちます!私はこれについてもう少し私のblogでブログをしています。

+0

先週のいくつかの考えの後、私はこれが私が考えていたものだと思っています。 DomianContextは完全なViewModelではなく、その一部です。([必須]のような)DomainServiceのMetadataTypeで定義された属性は、ViewModelに再宣言する必要がありますか、またはDomainContextが検証エンジンによってピックアップされるのに十分なViewModelの一部であるという事実はありますか? –

+0

Nikhilのブログ記事へのリンク:http://www.nikhilk.net/Entry.aspx?id=229 –

+0

[必須]などのメタデータ属性は、ビューモデル自体ではなくエンティティタイプにあります。ビューモデルからエンティティのインスタンスを公開すると、それらは取得されます(たとえば、上記のビューモデルサンプルのプロダクト)。 –

1

RIAサービスのデータコンテキストは、データバインディングをネイティブにサポートしているため、MVVMパターンでViewModelの役割を果たすように設計されていますが、ドキュメントではその用語を使用していません。しかし、それは本当に依存しています。コマンドやその他のビュー関連の状態など、RIAデータコンテキストよりも、ビューモデルに状態が必要なことがあります。あなたがしたいことは、RIAサービスのデータコンテキストをビューモデルの一部として使用することだと思います。

+0

もっと見ると、EntityObjectとそのMetaDataTypeをできるだけ隠したいと思っています。私はおそらくViewModelにDataContextが必要だと思っていますが、EntityObjectからMetaDataの内部クラスを削除し、ViewModelに移動したいと思っています。正しい? –

+0

待ちます。それは正しいとは言えません。私は、MetaDataクラスはクライアント側のViewModelとサーバー側にある必要があると思います。ああ。多分、ViewModelが共有コードに属しているのでしょうか? –

+0

レビューの結果、今朝はこの質問にあなたが答えたことが分かりました。こんにちはチャック、長い時間を参照してください。希望の人生はあなたをよく扱っています。 –

関連する問題