用于显示和编辑的WPF MVVM单一ViewModel

时间:2013-01-14 10:34:49

标签: wpf mvvm viewmodel

我正在使用Josh Smith中的示例。他有一个WorkspaceViewModel,它显示了CustomerViewModel列表。他使用相同的ViewModel来显示所有客户并编辑单个客户。

这是一个好习惯吗?如果我有一个CustomerViewModel列表,我不需要SaveCommand或CloseCommand或一些IsSelected Flag。

有一个单独的EditCustomerViewModel更好吗?但是如何处理与Workspace相关的东西呢?例如:

public class Workspace : ViewModel
{
    public ICommand CloseCommand;
}

public class AllCustomers : Workspace
{
    public ObservableCollection<CustomerViewModel> CustomerViewModels;
}

// Option A (one ViewModel for display and edit):
public class CustomerViewModel : ? 
{
    public string CustomerName;
    public ICommand SaveCommand;    
}

或分离:

// Option B:
public class CustomerViewModel : ViewModel 
{
    public string CustomerName;
}

public class EditCustomerViewModel : Workspace
{
    public CustomerViewModel CustomerViewModel;
    public ICommand SaveCommand;
}

// Option C (CustomerViewModel does not need CloseCommand but EditCustomerViewModel does):
public class CustomerViewModel : Workspace 
{
    public string CustomerName;
}

public class EditCustomerViewModel : CustomerViewModel
{   
    public ICommand SaveCommand;    
}

修改 我试着澄清我的问题。在Josh Smith示例中的CustomerViewModel中,他有关闭和保存客户的命令。在AllCustomerView中,他有一个GridView,它绑定到CustomerViewModels的ObservableCollection。但在GridView中,这两个命令都不是必需的。在GridView中,我可以忽略这两个命令,但这是一个好的设计吗?

1 个答案:

答案 0 :(得分:0)

我不太清楚你的意思,因为快速浏览一下这篇文章就表明他正在同时使用列表和视图/编辑视图模式AllCustomers­ViewModelCustomerViewModel。这肯定是推荐的做法,而不是使用具有多种责任的单一视图模型。

这两个视图模型都继承自WorkspaceViewModel,这增加了他的工作区功能。所以,总而言之,如果你想构建类似的东西,我会遵循他的模式。您还应该认真考虑一个MVVM框架,例如Caliburn.Micro,它可以添加简单的基于约定的视图合成以及屏幕生命周期。