Wpf 如何从完全不同的视图模型更新视图的datacontext
我想了解我们是否可以从ZViewModel更新XView数据上下文 我有一个XView,加载时它绑定到它的DataContext,绑定到它的XView模型 在ZViewModel中,我创建了一个新的XViewModel实例,并希望用这个新的XViewModel更新XView的datacontextWpf 如何从完全不同的视图模型更新视图的datacontext,wpf,mvvm,Wpf,Mvvm,我想了解我们是否可以从ZViewModel更新XView数据上下文 我有一个XView,加载时它绑定到它的DataContext,绑定到它的XView模型 在ZViewModel中,我创建了一个新的XViewModel实例,并希望用这个新的XViewModel更新XView的datacontext 我能做这个吗?有什么想法吗?回答你的问题:据我所知没有 此外,让ViewModel“向上看”视图有点违背MVVM的原则 如果您试图从根本上改变XViewModel中的某些数据集,您可以从MVVM的角度
我能做这个吗?有什么想法吗?回答你的问题:据我所知没有 此外,让ViewModel“向上看”视图有点违背MVVM的原则 如果您试图从根本上改变XViewModel中的某些数据集,您可以从MVVM的角度来研究。它可以让一个VM订阅某种类型的消息,并在收到该消息时执行某些操作 实际上,你可以:
美妙之处在于两个虚拟机都不知道另一个虚拟机。它通过总线完全解耦。如果您的视图是用户控件,那么这非常容易。可以将DataContext的绑定设置为ViewModel中的属性。单击该按钮基本上将UserControl重置为其默认状态
<Window
//usual Window declarations>
<Grid x:Name="LayoutRoot">
<view:MyView DataContext="{Binding MyViewModelProperty}" />
<Button Command="{Binding CmdChangeViewModel}"
Content="Change VM" />
</Grid>
</Window>
如果您的视图是另一个窗口,那么您将需要使用。我用的是这个。使用上面相同的MainViewModel,单击主视图中的按钮将更改另一个窗口的DataContext
子窗口:
<Window
//usual Window declarations
DataContext="{Binding Main.MyViewModelProperty, Source={StaticResource Locator}}" />
<Window
//usual Window declarations
DataContext="{Binding Main.MyViewModelProperty, Source={StaticResource Locator}}" />