所以我查看了这篇文章以及其他一些讨论类似情况的帖子,但仍未找到解决我想解决的问题的最佳解决方案.
在我的mvvm应用程序中,每个视图都有一个viewmodel.我想让viewmodels尽可能平坦,但是当涉及到与可观察集合的绑定时,它似乎并不实用.例如,如果我有一个页面显示客户端的配置文件信息,其中一个字段是一组活动订阅的复选框.我会有一个看起来像这样的viewmodel:
public class ClientViewModel
{
public class SubscriptionViewModel
{
public SubscriptionModel Subscription {get;set;}
public bool IsChecked {get;set;}
}
public string Name {get;set;}
public string Email {get;set;}
...
public ObservableCollection<SubscriptionViewModel> Subscriptions {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
由于IsChecked不属于的额外属性SubscriptionModel,我必须创建一个单独的SubscriptionViewModel并将其嵌套在客户端中.什么是更好的替代方法来做到这一点,以便我不必最终在viewmodels内的视图模型?
对我来说,将VM组合成其他几个虚拟机是完全可以的。我正在做很多事情。有时由于需要重用部件,有时只是为了使代码具有更好的可读性。每个VM仍具有一个对应的视图。因此,存在“内部视图模型”的视图以及“组合视图模型”的视图。
我不会使用嵌套的公共类。我将他们视为“头等公民”。
我最近遇到的情况是在客户页面和发票页面上显示一个小的产品信息。因此,我决定创建一个ProductOverviewViewModel以及一个ProductionOverviewView,它们都用于客户视图和发票视图/视图模型中。