2010-11-20 48 views
0

我是C#的新手,並且正在嘗試通過構建簡單的Crud應用來學習MVVM。在我的應用程序中,我想要一系列按鈕,當用戶點擊它時會加載該用戶控件。所以當你點擊「Add Item」時,它會用AddItemView代替現有的控件。我想知道我如何去做這件事?到目前爲止,我所見過的很多mvvm教程只是在MainMindow上有一個單獨的控件。MVVM交換控件

回答

3

對於這類任務,您通常使用ContentControl。將控件的Content屬性綁定到ViewModel的一個屬性(例如,CurrentViewModel),並在可以顯示在ContentControl中的每種ViewModel的資源中定義DataTemplates。當您將一個ViewModel分配到CurrentViewModel時,ContentControl將爲內容選擇合適的DataTemplate

主視圖模型

private object _currentViewModel; 
public object CurrentViewModel 
{ 
    get { return _currentViewModel; } 
    set 
    { 
     if (value != _currentViewModel) 
     { 
      _currentViewModel = value; 
      OnPropertyChanged("CurrentViewModel"); 
     } 
    } 
} 

的App.xaml

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:AddItemViewModel}"> 
     <v:AddItemView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:FooViewModel}"> 
     <v:FooView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:BarViewModel}"> 
     <v:BarView /> 
    </DataTemplate> 
    ... 
</Application.Resources> 

主視圖

... 
<ContentControl Content="{Binding CurrentViewModel}" /> 
... 

在你的情況下,命令爲「添加項目」按鈕,您將AddItemViewModel的實例分配給CurrentViewModel

+0

假設我有一個簡單的數據對象,而我有一組項目和一些功能。我可以切換出UserControl而不是ViewModel,每個UserControl甚至可以擁有它自己的ViewModel等等? – 2011-02-16 15:13:58