WPF MVVM怀疑
你好同胞StackOverflow用户(或Stackoverflowers?):
我正在通过编码来学习WPF。 我阅读了几篇文章/看到了几个截屏视频,并且来自WEB开发背景,我启动了VS2010,并开始做一个示例应用程序,帮助我学习基础知识。
我也读了一些关于MVVM的知识,并开始使用它。 我建立了我的解决方案来使用WPF 4.0,ActiveRecord 2.1和SQLite,并且一切都很顺利。 但我仍然有一些疑问:
我创建了一个MainWindowViewModel,并从这里使用RelayCommand类来传递命令。 我是否通过从MainWindow获取MenuItem来将其命令绑定到此视图模型的属性来打破任何指导?
我绑定MenuItem命令的这个动作是要实例化一个新的ViewModel和一个新的View,并显示它。 再一次,在MVVM上下文中可以吗?
我的MainWindow将是一种“仪表板”,我将有多个模型附加到该仪表板。 我应该将所有这些模型包装在单一视图模型中吗?
像这样的东西:
public class MainWindowViewModel {
private ObservableCollection<Order> openOrders;
private Address deliveryAddress;
private Order newOrder;
/* Wrappers for the OpenOrders Collection */
/* Wrappers for Delivery Address */
/* Wrappers for New Order */
/* Command Bindings */
}
TIA!
我创建了一个MainWindowViewModel,并从这里使用RelayCommand类来传递命令。 我是否通过从MainWindow获取MenuItem来将其命令绑定到此视图模型的属性来打破任何指导?
不,你没有违反任何指导原则。 将MenuItem绑定到MainWindowViewModel的一个命令是非常合适的(不管怎么样,你会把这个命令放在哪里?)
我绑定MenuItem命令的这个动作是要实例化一个新的ViewModel和一个新的View,并显示它。 再一次,在MVVM上下文中可以吗?
当然,创建一个新的ViewModel是完全正确的。 至于创建一个新的视图,它取决于你如何创建它......你当然不应该从ViewModel显式实例化一个视图,因为它会引入VM对视图的依赖。
我的MainWindow将是一种“仪表板”,我将有多个模型附加到该仪表板。 我应该将所有这些模型包装在单一视图模型中吗?
它取决于“换行”的意思......您的MainWindowViewModel
可以通过属性公开其他ViewModel,这些VM将显示在视图的不同部分。 如果这就是你的意思,是的,你应该包装它们。
添加到托马斯答案:
我会为仪表板的每个部分创建不同的用户控件,并为每个用户控件分配一个viewModel。
我创建了一个MainWindowViewModel,并从这里使用RelayCommand类来传递命令。 我是否通过从MainWindow获取MenuItem来将其命令绑定到此视图模型的属性来打破任何指导?
不,这正是你放命令的地方。
我绑定MenuItem命令的这个动作是要实例化一个新的ViewModel和一个新的View,并显示它。 再一次,在MVVM上下文中可以吗?
它不需要知道如何实例化新视图; 这是观点的工作。 如何做到这一点的具体细节取决于你如何展示这个新视图 - 它可以像视图中的ContentPresenter绑定到视图模型中的属性一样简单,所以当你设置属性(并提高PropertyChanged )ContentPresenter使用其相关的DataTemplate呈现新对象。
如果通过“实例化新视图”,你的意思是“打开一个新窗口”,事情会变得有点蹊跷。 有没有一种特别优雅的方式来做到这一点,特别是如果你想让新窗口成为模态对话框。 一种方法是将视图的代码隐藏添加到视图模型中的PropertyChanged上的事件处理程序; 当从属视图模型属性被设置时,视图中的代码将创建并显示新窗口。
我的MainWindow将是一种“仪表板”,我将有多个模型附加到该仪表板。 我应该将所有这些模型包装在单一视图模型中吗?
当然。 这是一个非常普遍的模式。 例如,公开可观察的集合属性并将某种ItemsControl绑定到它上面并不罕见; 该视图将自动为您放入该集合的每个视图模型创建视图。 同样,具体实现实际上取决于您的应用程序。
链接地址: http://www.djcxy.com/p/9595.html上一篇: WPF MVVM Doubts