2017-03-08 2 views
1

私はWPF MVVMを使い始めましたが、ちょっと立ち往生しました。 MVVMとwpfを使用して、同じビューで約100の異なるテーブルを切り替える必要があります。 私はテーブル名のリストを持つツリービューを持っていて、ツリービューの横に正しいDataGridが表示されなければならない項目を選択しました。 テーブルごとにModelクラスとViewModelクラスを作成しました。しかし、バインドする正しいViewModelを選択に応じてどのように選択すればよいですか。wpfを使用して同じビュー上のビューモデルを切り替えるmvvm

+0

コードがどのように見えるかわかっていると助かります。 1つのTreeViewエントリと1つのDataGridに同じViewModelを使用できます。 –

+0

こんにちはMighty、すべて私は現在、INotifyPropertyChangedでモデルモデルとビューモデルクラスを持っています。私はPeterが提案したことを実装しようとしていますが、それでもまだあまり成功していません。 – Vadim

答えて

0

私はあなたの問題を正しく理解していれば、設計に問題があります。ツリービューでBindingthisを参照してください -

まずTreeView

SelectedItemを使用するには、あなたのSelectedItem得ます。しかし、あなたはコードの背後に悪い方法を行うことができます。

セカンドバインドごSelectedItem

だから、あなたが何をしたいです:ContentControlまたはContentPresenterのようなものにSelectedItemをバインド 。あるいは、コードの背後にある悪い方法でやってください。このような例

:あなたは別のDataGrids

をお持ちの場合は

<Grid> 

<Grid.ColumnDefinitions> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 


<TreeView ItemsSource="{Binding MyItemSource}"> 
    <!-- Get the selected item here (watch how to in the linked answer) --> 
</TreeView> 


<ContentPresenter Grid.Column="1" 
        Content="{Binding Path=SelectedItem}" 
        > 
    <ContentPresenter.ContentTemplate> 
     <DataTemplate> 
      <DataGrid> 
       <!-- Your DatGrids or what ever --> 
      </DataGrid> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 

</Grid> 

サード(オプション)あなたは、あまりにもあなたのSelectedItemに応じて、あなたのビューを変更するにはDataTemplateSelectorを使用することができます。この例ではContentPresenterで使用します。

+0

いくつかのビューモデルを、選択されたモデルを直接バインドするビューで作業しているビューモデルに結合するのは意味がありますか?<! - language:c# - >ObservableCollection _selectedmodel; public ObservableCollection SelectedModel { get { return _selectedmodel; } set { _selectedmodel = value; RaisePropertyChanged("SelectedModel"); } } – Vadim

+0

あなたは正しいアイデアを持っていますが、階層であなたのものを構築してください。そのため、 'SelectedModel'はViewModelであり、コレクションメイトではありません!明らかに、「SelectedModel」は、フィールドObservableCollectionタイプを有する。 – Peter

関連する問題