MVVM交换控件

时间:2010-11-20 17:56:16

标签: c# mvvm navigation

我是C#的新手,正在尝试通过构建一个简单的Crud应用程序来学习MVVM。在我的应用程序中,我希望有一系列按钮,当用户点击它时将加载该用户控件。因此,当您单击“添加项”时,它将使用AddItemView替换现有控件。我想知道我是怎么做到的?到目前为止我见过很多mvvm教程,他们在MainMindow上只有一个控件。

1 个答案:

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