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

    下一篇: evaluation of MVVM command's "can execute" state