2010-11-20 35 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