我是C#的新手,正在尝试通过构建一个简单的Crud应用程序来学习MVVM。在我的应用程序中,我希望有一系列按钮,当用户点击它时将加载该用户控件。因此,当您单击“添加项”时,它将使用AddItemView替换现有控件。我想知道我是怎么做到的?到目前为止我见过很多mvvm教程,他们在MainMindow上只有一个控件。
答案 0 :(得分:3)
对于此类任务,您通常使用ContentControl
。将控件的Content
属性绑定到ViewModel的属性(例如CurrentViewModel
),并在可以在{{中显示的每种类型的ViewModel的资源中定义DataTemplates
。 1}}。当您将ViewModel分配给ContentControl
时,CurrentViewModel
会为内容选择适当的ContentControl
。
主要ViewModel
DataTemplate
<强>的App.xaml 强>
private object _currentViewModel;
public object CurrentViewModel
{
get { return _currentViewModel; }
set
{
if (value != _currentViewModel)
{
_currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
}
主视图
<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