0
我是C#的新手,并且正在尝试通过构建简单的Crud应用来学习MVVM。在我的应用程序中,我想要一系列按钮,当用户点击它时会加载该用户控件。所以当你点击“Add Item”时,它会用AddItemView代替现有的控件。我想知道我如何去做这件事?到目前为止,我所见过的很多mvvm教程只是在MainMindow上有一个单独的控件。MVVM交换控件
我是C#的新手,并且正在尝试通过构建简单的Crud应用来学习MVVM。在我的应用程序中,我想要一系列按钮,当用户点击它时会加载该用户控件。所以当你点击“Add Item”时,它会用AddItemView代替现有的控件。我想知道我如何去做这件事?到目前为止,我所见过的很多mvvm教程只是在MainMindow上有一个单独的控件。MVVM交换控件
对于这类任务,您通常使用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
假设我有一个简单的数据对象,而我有一组项目和一些功能。我可以切换出UserControl而不是ViewModel,每个UserControl甚至可以拥有它自己的ViewModel等等? – 2011-02-16 15:13:58