好的,我正在使用MVVMC(或MVCVM)模式在WPF中使用Microsoft Prism。
在我的ChatModule中,我有一系列Views,ViewModel和一个Controller。
对于我有的观点
对于每个视图,我都有一个相应的ViewModel。 ChatAreaViewModel,UserAreaViewModel和MessageAreaViewModel 。这些ViewModel基本上只包含属性。
例如,UserAreaViewModel定义了User类型的结构,它基本上只是一个Name。实际上这是在课外定义的,但仍然......它使用它。它有一个ObservableCollection来存储当前连接的所有用户的列表。它还定义了与用户交互的ICommand属性。现在我有SendFile,Whisper和Nudge ......意图在未来增加更多。
Controller创建这些视图和ViewModel,并将它们结合在一起。它将它们新闻化,将ViewModel指定为相应的View的DataContext,并设置ViewModel的所有初始属性。在模块的生命周期内,它将对用户交互做出反应,并执行已分配给每个ViewModel的ICommand属性的DelegateCommands。这些将进一步改变ViewModel中属性的状态。
我正在使用View和ViewModel的实际类型,而不是像这样的接口。
#region Views
ChatAreaView viewChatArea;
UserListView viewUserArea;
MessageView viewMessageArea;
LoginPromptView viewLoginPrompt;
#endregion
#region ViewModels
ChatAreaViewModel viewModelChatArea;
UserAreaViewModel viewModelUserArea;
MessageAreaViewModel viewModelMessageArea;
LoginPromptViewModel viewModelLoginPrompt;
#endregion
如果我为Views和ViewModel定义了接口,并且在控制器内的这些接口上操作而不是具体的实现,那么事情会变得更整洁,更少耦合吗?那么我可以在Module类中注册它们的Container(它本质上是每个模块的根目录吗?)
这样做我有什么好处?我如何为每个视图实现一个界面,以区别于其他视图?除了拥有XAML之外,他们并没有真正做任何事情...而且除了具有某些属性之外,ViewModel并没有真正做任何事情。这些属性可能会有所变化。例如,在UserAreaViewModel上,我肯定希望添加更多命令,以便用户可以通过不同方式与其他用户进行交互。
有人可以帮助我吗?在我看来,我认为我应该抽象这些东西,但我真的不知道我应该采用什么逻辑方式,或者即使这样做是明智的。我有什么收获?
感谢您的时间。下图是我正在研究的一个例子。忽略添加新项目按钮和所有内容的样式......这不是我现在正在处理的内容。
答案 0 :(得分:0)