2009-07-21 15 views
3

同じモデルを別のビューに表示する2つのViewModelがあります。 1つはListBoxのアイテムとしてモデルを提示し、もう1つはTabControlのタブとして表示します。 TabControlは、ListBoxで選択されている項目のタブを表示して、選択の変更に応じてタブが移動するようにします。ViewModels間の状態の共有

私は簡単に(ビットthisのような)モデルにIsSelectedプロパティを追加し、それにのviewmodelsを結合することによって、2つのコントロールを同期させることができますが、これは実際にそこに属していないプレゼンテーションの詳細をモデルに乱雑になります。

この余分な状態を保持するには、ModelとViewModelsの間に何かが必要なようです。これを行う良い方法のパターンや例がありますか?

答えて

9

ViewModelを使用してください。

2つのコントロールを含むビューがあります。 ListBoxコントロールがバインドするためのViewModelのリストを含むビューモデルを用意します。また、このビューモデル内では、リストボックス選択を、TabControlがバインドするビューモデルの2番目のリストにバインドします。

このようにして、リストコントロールは、タブコントロールに表示される情報をドライブし、この情報がモデルに入力されない限り、ビューの存在を知らないはずです。

+0

2つのコントロールを含むビューはプリズムシェルであり、コントロールは別々のモジュールにありますが、私は原理を適用できると思います。ありがとう。 – GraemeF

1

TabControlはItemsControlなので、ItemsSourceをListBox.SelectedITemsにバインドすることを恥ずかしくないでください。

明らかにリストのためのViewModelは、タブのためのViewModelを生成する性質れている必要があります。

public TabViewModel ItemTabModel { get { ... } } 

をそしてTabControlのは少しおかしいですので、あなたが通常のため、TabControlItemのコンテンツを取り込むためにItemContainerStyleを追加する必要があると思いますTableControlのItemTemplateは、タブのヘッダーにのみ影響します。

関連する問題