在每个命令上将多个ViewModel绑定到Content Control

时间:2010-09-14 18:17:44

标签: wpf mvvm

我已经通过Tab控件的示例来保存多个视图。但我的要求有点不同。

内容控件应该是唯一显示视图的区域,它必须根据命令进行更改,例如:添加新视图,查看全部视图,搜索等。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在ViewModel上,您希望拥有一个属性:

private object content;
public object Content
{
  get { return content; }
  set
  {
     this.content = value;
     OnPropertyChanged("Content");
  }
}

然后在主窗口(或托管您的内容的位置)添加ContentControl:

<ContentControl Content="{Binding Path=Content}"
                HorizontalContentAlignment="Left"
                VerticalContentAlignment="Center"
                Focusable="False"/>

主ViewModel将维护已知ViewModel(查看全部,搜索)的列表,并在适当的命令执行中将Content属性设置为其中一个ViewModel,Add New命令可能会创建AddNewViewModel的新实例并设置内容属性。

在ContentControl所在的视图中,将一些数据模板放在参考资料中,将ViewModel映射到适当的视图:

<DataTemplate DataType="{x:Type vm:AddNewViewModel}">
  <AdornerDecorator>
    <views:AddNewView DataContext="{Binding}"/>
  </AdornerDecorator>
</DataTemplate>

这是我正在使用的向导中使用的基本模式。

答案 1 :(得分:0)

我使用了ObservableCollection<ViewModelBase>。 然后在每个命令(AddNew,ViewAll等..)上我将ViewModel添加到集合中。但是在我添加之前我清理了这个集合。