我已经通过Tab控件的示例来保存多个视图。但我的要求有点不同。
内容控件应该是唯一显示视图的区域,它必须根据命令进行更改,例如:添加新视图,查看全部视图,搜索等。
提前致谢。
答案 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添加到集合中。但是在我添加之前我清理了这个集合。