Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于MVVM中对象之间的交换消息,有什么建议或最佳实践吗?_C#_Mvvm Light - Fatal编程技术网

C# 对于MVVM中对象之间的交换消息,有什么建议或最佳实践吗?

C# 对于MVVM中对象之间的交换消息,有什么建议或最佳实践吗?,c#,mvvm-light,C#,Mvvm Light,我有一个关于如何在对象之间交换消息的最佳实践问题?我找到了两种方法: 使用简单操作和Func委托 使用mvvm light toolkit messenger。 在案例一中,它不依赖于任何工具包,并且易于使用,但我想知道案例2是否有任何好处,或者案例1是否违反了任何原则 欢迎任何想法。如果要使用操作和Func委托,ViewModels应该相互了解。但是MVVM中的ViewModels与MVC中的Controllers类似,它们不应该相互直接引用。这就是为什么在这里使用MVVM Light Too

我有一个关于如何在对象之间交换消息的最佳实践问题?我找到了两种方法:

  • 使用简单操作和Func委托
  • 使用mvvm light toolkit messenger。 在案例一中,它不依赖于任何工具包,并且易于使用,但我想知道案例2是否有任何好处,或者案例1是否违反了任何原则

  • 欢迎任何想法。

    如果要使用
    操作和Func委托
    ,ViewModels应该相互了解。但是MVVM中的
    ViewModels
    与MVC中的
    Controllers
    类似,它们不应该相互直接引用。这就是为什么在这里使用
    MVVM Light Toolkit的Messenger
    是首选方法。在这种情况下,您将拥有一个松散耦合的消息传递系统,而不需要对应用程序的任何部分进行任何硬引用。

    子视图模型将通过事件与父母或兄弟姐妹进行通信。父视图模型将通过调用方法或设置属性与子视图模型通信。什么样的对象将相互通信?我想,案例2的好处是,每当你用模糊、专业化、依赖性强的东西替换一个强大、简单、通用的机制时,一个建筑宇航员就会展翅飞翔。客观上,我想这可能是基于观点的。解决这个问题的方法太多了。答案将变成一个人们喜欢的民意测验。最好的办法是自己做一些关于这个话题的研究,找到两三个,分析它们,确定它们是否对你有用,并尝试一下。如果您有关于尝试执行的操作的特定问题,请与我们联系……最后,viewmodels通过INotifyPropertyChanged/INotifyCollectionChanged与视图通信,而视图通过设置属性或执行命令与viewmodels通信。或者,代码隐藏可能会设置viewmodel属性、调用viewmodel方法或处理viewmodel事件。非常好的评论!感谢您花时间来编写它。“MVVM中的视图模型就像MVC中的控制器,它们不应该相互直接引用。”——这完全是错误的。如果您通过编写以视图为中心的设计来破坏MVVM,那么这就是您所采用的解决方法。不,在MVVM中,一个
    ViewModel
    “解释用户操作(例如,通过ICommand),执行它们,更新应用程序状态”,这就像MVC中的
    控制器的功能一样。更多信息:你的评论是关于相似性的,是的,它们非常相似。本主题的全部目的是在基于MVVM的系统的不同部分之间交换信息,在这里使用
    MVVM Light Toolkit的Messenger
    是一个非常可接受的解决方案。Messenger类减少了viewmodels之间的耦合。每个viewmodel都可以与另一个viewmodel进行通信,而它们之间没有任何关联。“它们不应该相互直接引用”-不,父viewmodel应该引用它们的子视图,并试图避免这会导致疯狂。我不应该复制关于MVC的部分;这与我想表达的观点无关。我没有说任何相似之处。