当前位置: 首页 > 编程语言 > C#

更改ViewModel的视图共享

时间:2023-04-10 23:46:57 C#

更改ViewModel的视图我正在尝试为mtWPF应用程序实现MVVM设计模式。为了将视图连接到视图模型,我使用了一个ResourceDictionary(在Application.Resources中),它看起来像然后简单地将视图模型放在内容展示器中以显示它们。现在,当用户按下按钮时,我想用不同的视图显示SampleViewModel。如何更改SampleViewModel使用的数据模板?少说话多写代码。如您所说,您有SampleViewModel类。我添加了Title属性Demo和ViewType来识别正确的视图:publicenumItemViewType{View1,View2};公共类SampleViewModel{公共字符串标题{得到;放;}publicItemViewTypeViewType{得到;放;}}对于视图的DataTemplateSelector,取决于ViewType属性:classItemViewTemplateSelector:DataTemplateSelector{publicDataTemplateView1Template{get;放;}publicDataTemplateView2Template{get;放;示例视图模型;如果(vm==null)返回null;switch(vm.ViewType){caseItemViewType.View1:returnView1Template;caseItemViewType.View2:返回View2Template;}返回空值;,我把切换视图的逻辑放在那里:this.SwitchViewCommand=newRelayCommand(()=>{this.ItemViewModel.ViewType=this.ItemViewModel.ViewType==ItemViewType.View1?ItemViewType.View2:ItemViewType.View1;//强制内容控件更改内容模板的神奇操作序列varcopy=this.ItemViewModel;这。项目视图模型=空;this.ItemViewModel=复制;});}publicRelayCommandSwitchViewCommand{get;放;}私有SampleViewModelitemViewModel;公共SampleViewModelItemViewModel{获取{返回itemViewModel;}设置{itemViewModel=值;RaisePropertyChanged("ItemViewModel");SwitchViewCommand可以是任何类型的命令,我使用mvvmlight库中的命令在命令的处理程序中,我更改视图模型的类型并以一种巧妙的方式更新属性ItemViewModel,因为ContentControl仅更改内容property刷新视图,除非您设置对不同对象的引用,否则此属性不会更改。我的意思是,即使代码this.ItemViewModel=this.itemViewModel也不会改变视图。这很奇怪,但解决方法并不需要太多工作。您可以通过多种不同的方式实现这一点,具体取决于您想要的架构。您可以通过将类似的资源放在树中较低的位置来覆盖映射。由于WPF将通过向上搜索来解析资源,因此此覆盖将替换您现有的映射。以上就是C#学习教程的全部内容:改变ViewModel的视图共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: