2011-06-27 5 views
0

私は次のような問題があります。私は、ユーザーがGTalkに異なるアカウントで接続したいチャットWPFアプリケーションを構築しています。私はViewModel(前の質問で私にいくつかの問題を解決したStackOverflowのおかげで...)を作成しましたが、これは通信を処理することを可能にしますが、どちらがDataContextを処理する最良の方法かわかりません。私は、すべての接続インスタンスのために異なるDataContextsが必要だと思うが、これは正しい方法であるかわからないし、Viewで複数のDataContextsを定義する方法を知らない。 誰でも助けてくれますか?ビュー内の複数のDataContext対MVVM?そうですか?

答えて

1

DataContextは、ビュー内の要素のデフォルトバインディングソースを提供します。ビジュアルツリー内で親から子に継承されます。任意の要素のDataContextは、親の一部のプロパティにバインドすることで変更できますDataContext。これは、子ビューモデルにバインドする「島」を作成する一般的な方法です。

あなたがAddressプロパティを持っているユーザービューモデルを持っている場合たとえば、次のように、あなたはAddressUserControlでこれをレンダリングすることができますが:

<StackPanel> 
    ... elements bound to properties of User ... 

    <AddressUserControl DataContext="{Binding Address}"/> 
</StackPanel> 
0

あなたがアカウントの可変数を持っている場合は、あなたが使用することができますItemsControl。

これの背後にある大まかなアイデア:ItemsControlをメインViewModelの「Sub-ViewModels」のリストにバインドし、それぞれのDataTemplate(= View)を定義することができます。各DataTemplateのDataContextは、ViewModelのリスト内の対応する項目に自動的に割り当てられます。

関連する問題