Paw*_*anS 7 c# wpf mvvm c#-4.0
我正在创建一个WPF应用程序并遵循MVVM模式.但是在做事的时候我担心这个问题,它是否符合MVVM的要求?请引导这些疑惑.
是否有必要为每个View都有一个新的ViewModel?如果没有,那么可以创建单个MasterViewModel是否违反MVVM?
ViewModels将如何相互通信?
MainWindow.xaml.cs 我在哪里集成所有的视图,应该只有viewmodel的初始化和分配DataContext将在那里或我也可以放其他代码?
我有我定义的EventHandlers.我应该在ViewModel中使用它们还是在model-view-viewmodel之外使用它们?
您需要阅读一些有关 MVVM 的内容。请参阅以下问题:
MVVM 模板的好例子
良好的 Silverlight-MVVM 实践示例
MVVM Light Toolkit 示例
对于您的问题:
有些人遵循这个规则。:每个视图一个视图模型 请参阅本文中的规则#2。
遵循这一点并不是绝对必要的,但创建一个 MasterViewModel 并在任何地方使用它,意味着您还没有理解 MVVM。
如果您指的是封装通用位,那么,MVVM Light Toolkit可能有一个 ViewModelBase 类,用于封装一些东西。
ViewModels 不会相互通信,ViewModels 将与 Views 通信,Views 将与其他 Views 通信(并可能为它们实例化 ViewModels),某些框架甚至有一种松散耦合的方式来执行此操作(我想到了ReactiveUI )
当调用 View 时,您可以实例化其相应的 ViewModel,然后将其设置到 DataContext。但是,执行此操作有许多不同的模式。@Eupphoric 在评论中提到 ViewModel-first,其中 ViewModel 通过 Ioc 创建视图。查看哪个先出现 - View 或 ViewModel。
MVVM Light 有一个 ViewModel 定位器,它允许您在 XAML 中静态定义视图 ViewModel。当您创建视图时它会自动设置。
这里不太清楚,(a)如果您有来自按钮、菜单(任何从 ButtonBase 派生的事件)的事件,您应该使用命令模式来实现这些事件。MVVM Light 有一个很好的RelayCommand<T>功能可以帮助您。
(b)其他事件,MVVM Light 具有 EventToCommand 行为,但 Laurent(作者)警告这会变成反模式。我认为有时您可以在后面的代码中使用普通事件,然后从那里调用您的 ViewModel(但是嘿,我不是这里的专家)
您到处都问了几个问题。问题可能是你不明白为什么要使用 MVVM。
简单来说,MVVM 允许您将正确的内容保留在正确的位置,即 ViewModel 中的应用程序逻辑/控制,然后借助 Silverlight/WPF 数据绑定的功能,将 ViewModel 挂接到您的视图。
正如Laurent解释的那样,有时事情不必那么复杂。您甚至并不总是需要框架。
我强烈建议您观看他的 MIX 视频,标题为“理解模型-视图-视图模型模式”:http:
//live.visitmix.com/Archive#VideoList
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |