在viewmodels中有viewmodels是不是很糟糕?

时间:2015-02-18 15:29:14

标签: wpf mvvm

所以我检查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?

1 个答案:

答案 0 :(得分:5)

对我而言,将VM与其他几个人合并是完全没问题的。我这么做很多。有时由于需要重新使用部件,有时只是为了在代码中具有更好的可读性。 每个VM仍有相应的视图。因此,有一个“内部视图模型”的视图以及“组合视图模型”的视图。

我不会使用嵌套的公共类。我把他们当作“一等公民”。

我最近的情景是客户页面上的小型产品信息显示以及发票页面。 所以我决定创建一个ProductOverviewViewModel以及一个ProductionOverviewView,它们都在customer和invoice views / viewmodels中使用。