所以我检查this post以及其他一些讨论类似情况的人,但仍未找到解决我正在努力解决的问题的最佳解决方案。
在我的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;}
}
由于不属于IsChecked
的额外SubscriptionModel
属性,我必须创建一个单独的SubscriptionViewModel
并将其嵌套在客户端中。什么是更好的替代方法,以便我不必最终在viewmodels中使用viewmodel?
答案 0 :(得分:5)
对我而言,将VM与其他几个人合并是完全没问题的。我这么做很多。有时由于需要重新使用部件,有时只是为了在代码中具有更好的可读性。 每个VM仍有相应的视图。因此,有一个“内部视图模型”的视图以及“组合视图模型”的视图。
我不会使用嵌套的公共类。我把他们当作“一等公民”。
我最近的情景是客户页面上的小型产品信息显示以及发票页面。 所以我决定创建一个ProductOverviewViewModel以及一个ProductionOverviewView,它们都在customer和invoice views / viewmodels中使用。