C# · 12月 23, 2021

c# – WPF MVVM怀疑

你好StackOverflow用户(或Stackoverflowers?):

我正在通过编写WPF来学习.我阅读了几篇文章/看过几个截屏视频,并且来自WEB开发背景,我启动了VS2010并开始做一个示例应用程序,这将帮助我学习基础知识.

我也读了一些关于MVVM的内容,并开始使用它.我设置我的解决方案使用WPF 4.0,ActiveRecord 2.1和sqlite,一切都很顺利.但我还是有些疑惑:

>我创建了一个MainWindowviewmodel,并使用here中的RelayCommand类来…中继命令.我是否通过从MainWindow使用MenuItem将其命令绑定到此viewmodel的属性来破坏任何准则?
>这个动作我将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!

解决方法

I created a MainWindowviewmodel,and am using the RelayCommand class from here to… relay the command. Am I breaking any guidelines by having a MenuItem from the MainWindow to have its command bound to a property of this viewmodel?

不,你没有违反任何准则.将MenuItem绑定到MainWindowviewmodel的命令是完全合适的(无论如何你还会把这个命令放在哪里?)

This action I’m binding the MenuItem command to is going to instantiate a new viewmodel and a new View,and show it. Again,is that ok in the MVVM context?

当然,创建一个新的viewmodel是完美的.至于创建一个新视图,它取决于你如何创建它……你当然不应该从viewmodel显式地实例化一个视图,因为它会引入VM对视图的依赖.

My MainWindow will be a kind of “dashboard”,and I will have more than one model attached to this dashboard. Should I just wrap all those models in a single view model?

这取决于你的意思“换行”…你的MainWindowviewmodel可以通过属性公开其他viewmodel,这些VM将显示在视图的不同部分.如果这就是你的意思,是的,你应该把它们包起来.