c# – 在大型应用程序中使用MVVM – 共享视图模型,模型,状态等

前端之家收集整理的这篇文章主要介绍了c# – 在大型应用程序中使用MVVM – 共享视图模型,模型,状态等前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道你们中有谁知道一些很好的教程来解释大型应用程序的MVVM.我发现的每一个关于MVVM的教程都只是基础知识(如何实现model,viewmodel和view),但是对于在应用程序页面之间传递数据以及在哪里可以存储常见的应用程序页面的技术和模式,我很好奇数据(在多个视图模式之间共享)等

我喜欢没有任何MVVM框架(MVVMLight等)的纯c#/ XAML解决方案.

解决方法

techniques and patterns when it comes to passing data between
application pages

如果数据传递是事件驱动的(即:您希望在收到从服务器推送的数据时通知),请使用弱事件. Prism的EventAggregator是许多实现之一.

如果数据传递是不变的,那么DataContext就会向下流过XAML树,只需使用绑定.
这意味着如果你有一个“主”UserControl使用其他更具体的UserControls,不要设置他们的DataContext,他们将继承主人和一切都很好.
如果要分离功能,请在主视图模型中使用组合.

where to init viewmodels

纯粹主义者会告诉你直接在XAML中实例化它们.我几乎从来没有这样做.
首先,viewmodels通常需要服务,它们作为构造函数参数传递,或者通过MEF在构造函数中注入…等等.所以你不能有一个无参数的构造函数,或者更难.

现在,我们可以做好事情,但是有什么好处呢?让视图的代码隐藏获取viewmodel,或者将其注入到其构造函数中是非常好的.

where to store common application data (shared between multiple
viewmodels)

如果数据是全局的:使用静态类/属性,
在XAML中,您可以通过{x:Static my:StaticClass.StaticProperty}访问它们,如果要达到嵌套类/枚举,则使用而不是.

如果数据仅在多个viewmodel之间共享但不是全部,则在视图模型上使用继承/合成以及控制器模式.

从经验汇总的其他提示

>只限制你所需要的:当你只需要一个字符串时,不要绑定到整个对象.
>如果你一再绑定相同的东西,不要犹豫,通过继承自Binding / MultiBinding进行自定义标记.它是DRY 101,但大多数人只是复制/粘贴绑定由于某些原因.

例:

public class VisibilityBinding : MultiBinding,IMultiValueConverter
{
   public VisibilityBinding()
   {
      var isSomething = new Binding("IsSomething");
      isSomething.ElementName = myUsrCtrl;
      this.Bindings.Add(isSomething);

      //Add more bindings

      this.Converter = this;
    }

    //Implement IMultiValueConverter to compute a System.Visibility from the bound values.
}

而在XAML:

<TextBox Visibility={customMrkup:VisibilityBinding} />

>尽量避免任何数据重复,一直到DAL.同步可以通过I(Multi)ValueConverter推导出的字段变得复杂得非常快.
示例:您有一个音频文件.它具有开始时间,结束时间和持续时间.摆脱这3个属性中的任何一个,第三个可以推断出来.

如果我想到任何更多的技巧,我会回来添加它们.

希望这可以帮助!

原文链接:https://www.f2er.com/csharp/95790.html

猜你在找的C#相关文章