程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MVVM 方式通知邻居用户控件有关更改大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决MVVM 方式通知邻居用户控件有关更改?

开发过程中遇到MVVM 方式通知邻居用户控件有关更改的问题如何解决?下面主要结合日常开发的经验,给出你关于MVVM 方式通知邻居用户控件有关更改的解决方法建议,希望对你解决MVVM 方式通知邻居用户控件有关更改有所启发或帮助;

全部!

在我的主窗口中,我有一个包含 2 列的网格。第 0 列是带有设置的用户控件,第 1 列是带有内容的用户控件。 目标是在更改设置时使用内容重置用户控件。什么是正确的“MVVM”方式?

两个用户控件均以 MVVM 方式实现,所有业务逻辑都在 viewmodel 中。

假设我有一个 checkBox 绑定到 setTings-usercontrol 中的一个属性:

SetTings.xaml

...
<checkBox Ischecked="{Binding Path=MySetTingNr1}">
...
@H_696_16@

SetTings_viewmodel.cs

...
public bool MySetTingNr1 
{
  get 
  {
    return _model.SttNr1;
  }
  set 
  {
    if(_model.SttNr1 == value) return;
    _model.SttNr1 = value;
    OnPropertyChanged(nameof(MySetTingNr1));
  }
}
...
@H_696_16@

如果用户单击此复选框,我如何通知我的内容用户控件?
路由事件可能不会执行,因为两个用户控件都是主窗口网格中的邻居
我想到的唯一方法是使用设置在用户控件中触发事件,在主窗口中捕获它并使用内容调用用户控件的函数。有没有办法缩短这个调用链?

提前致谢。

解决方法

您可以为两个用户控件绑定到的窗口使用单个共享视图模型,即它们都继承父窗口的 strncpy@H_696_16@。这样他们就可以直接通过共享视图模型进行通信。

如果您更喜欢有两个不同的视图模型,每个用户控件一个,您可以使用事件聚合器或信使以松散耦合的方式将事件/消息从一个视图模型发送到另一个视图模型。

大多数 MVVM 库都为此实现了解决方案。例如,Prism 使用 event aggregator,MvvmLight 使用 messenger。

有关该概念的更多信息,请参阅 this blog post。

大佬总结

以上是大佬教程为你收集整理的MVVM 方式通知邻居用户控件有关更改全部内容,希望文章能够帮你解决MVVM 方式通知邻居用户控件有关更改所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。