我想知道你们中是否有人知道一些很好的教程,解释大型应用程序的MVVM。我发现的MVVM上的每个教程都只是解释了基础知识(如何实现模型,视图模型和视图),但我对应用程序页面之间传递数据的技术和模式很感兴趣,初始化视图模型的位置,存储公共应用程序的位置数据(在多个视图模型之间共享)等
我更喜欢没有任何MVVM框架的纯c#/ XAML解决方案(MVVMLight等)。
我想知道你们中是否有人知道一些很好的教程,解释大型应用程序的MVVM。我发现的MVVM上的每个教程都只是解释了基础知识(如何实现模型,视图模型和视图),但我对应用程序页面之间传递数据的技术和模式很感兴趣,初始化视图模型的位置,存储公共应用程序的位置数据(在多个视图模型之间共享)等
我更喜欢没有任何MVVM框架的纯c#/ XAML解决方案(MVVMLight等)。
在两者之间传递数据时的技术和模式 申请页面
如果数据传递是事件驱动的(即:您希望在接收从服务器推送的数据时通知),请使用弱事件。 Prism的EventAggregator是众多实现中的一种。
如果数据传递是常量,那么让DataContext向下流动XAML树并简单地使用绑定。
这意味着如果你有一个“主”UserControl使用其他更具体的UserControls,不要设置他们的DataContext,他们将继承master,并且一切都很好。
如果要分离功能,请在master的viewmodel中使用composition。
在哪里初始化viewmodels
纯粹主义者会告诉你直接在XAML中实例化它们。我几乎从不这样做。
首先,ViewModels通常需要服务,它们作为构造函数参数传递,或者通过构造函数中的MEF注入......等等。所以你不能拥有无参数构造函数,或者它更难。
现在,我们可以做很多事情,但有什么好处呢?让视图的代码隐藏检索ViewModel,或者在构造函数中注入它是完全没问题的。
存储公共应用程序数据的位置(在多个之间共享) 的ViewModels)
如果数据是全局的:使用静态类/属性,
在XAML中,您可以通过它访问它们 {x:Static my:StaticClass.StaticProperty}
,如果你想要达到嵌套类/枚举,请使用 +
代替 .
如果数据仅在多个ViewModel之间共享,但不是全部共享,请在视图模型上使用继承/组合以及控制器模式。
从经验中收集的其他提示:
只严格绑定你需要的东西:当你只需要一个字符串时,不要绑定到整个对象。
如果你一次又一次地绑定相同的东西,请不要犹豫,通过继承来制作自定义标记 Binding
/MultiBinding
。这是DRY 101,但大多数人只是出于某种原因复制/粘贴Bindings。
例:
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} />
如果我想到更多提示,我会回来添加它们。
希望这可以帮助!
你可能想看看这本书: 使用Windows Presentation Foundation和模型视图ViewModel模式构建企业应用程序 (例如在 Amazon.com)。
它在更一般的上下文中接近MVVM,而不仅仅是一个5分钟的代码片段,甚至可以提供有关如何组织业务解决方案的预测。
我们经常在工作中使用它作为参考。就个人而言,我希望它能更深入地了解细节。但是,从业务线应用程序的角度来看,进入MVVM是一个很好的阅读。
说明文字:
创建丰富,灵活且可维护的业务线应用程序 使用MVVM设计模式
通过应用来简化和改进业务应用程序开发 Windows Presentation Foundation(WPF)和Microsoft的MVVM模式 Silverlight 4.通过本动手指南,您将使用MVVM和数据 绑定,命令和行为松散地创建用户界面 与业务逻辑相结合。 MVVM是.NET开发人员工作的理想选择 使用WPF和Silverlight - 无论您是否具有构建经验 企业应用。
了解如何:
- 深入了解MVVM,并了解它与其他UI设计模式的区别 构建一个简单的客户关系管理应用程序,您可以适应自己的项目
- 实现MVVM以维护UI声明语法和表示逻辑代码之间的分离
- 创建域模型以定义应用程序的业务上下文
- 使用Microsoft Entity Framework和NHibernate为数据访问层编写动态代码
- 使用Windows Workflow Foundation 4实施复杂的数据验证方案
- 使用Microsoft Prism等框架和工具包实现MVVM
首先,您可以创建一个BaseViewModel,其中包含一些在所有ViewModel中都很常见的属性。使用依赖注入之类的 城堡 / PRISM4 将数据从一个发送到另一个我们使用的视图模型 棱镜EventAggregator 我希望这对你的任务有所帮助。但就像Jon说的那样,完全取决于你喜欢使用的东西。但这些都是很好的起点。