2017-03-08 46 views
1

我是WPF MVVM的新手,並且有點卡住了。我需要使用MVVM和wpf在同一視圖中的大約100個不同的表之間切換。 我有TreeView的表名列表和項目選擇正確的DataGrid必須顯示旁邊的TreeView。 我爲每個表創建了Model和ViewModel類。但是,如何根據選擇選擇合適的Viewmodel進行綁定。使用wpf在相同視圖之間切換viewmodels mvvm

+0

如果我們知道你的代碼是什麼樣子,這將有所幫助。您可以將同一個ViewModel用於一個TreeView條目和一個DataGrid例如 –

+0

你好,我目前有INotifyPropertyChanged模型和viewmodel類。我試圖執行彼得所建議的,但仍然沒有太大的成功。 – Vadim

回答

0

如果我理解你的問題是正確的 - 那麼你有一個設計問題。

首先讓您TreeView

要使用SelectedItemSelectedItem - 上一個TreeView Binding看到this。但是你也可以在後面的代碼中做壞的方法。

綁定您的SelectedItem

所以,你想要做的是: 上像一個ContentControlContentPresenter綁定SelectedItem。或者在代碼背後做壞的方法。

例如像這樣:

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

三(可選)如果你有不同的DataGrids

你也可以使用一個DataTemplateSelector改變你的意見取決於你的SelectedItem了。在本例中,您將在ContentPresenter上使用它。

+0

將多個視圖模型合併到直接綁定所選模型的視圖中是否有意義?<! - language:c# - >ObservableCollection _selectedmodel; public ObservableCollection SelectedModel { get { return _selectedmodel; } set { _selectedmodel = value; RaisePropertyChanged("SelectedModel"); } } – Vadim

+0

您有正確的想法,但執行效果不佳。建立你的東西與hierarchie。所以'SelectedModel'是一個ViewModel,而不是一個收集隊友!很明顯,'SelectedModel'有一個類型爲ObservableCollection的字段。 – Peter