我正在使用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中,我可以忽略这两个命令,但这是一个好的设计吗?
答案 0 :(得分:0)
我不太清楚你的意思,因为快速浏览一下这篇文章就表明他正在同时使用列表和视图/编辑视图模式AllCustomersViewModel
和CustomerViewModel
。这肯定是推荐的做法,而不是使用具有多种责任的单一视图模型。
这两个视图模型都继承自WorkspaceViewModel
,这增加了他的工作区功能。所以,总而言之,如果你想构建类似的东西,我会遵循他的模式。您还应该认真考虑一个MVVM框架,例如Caliburn.Micro,它可以添加简单的基于约定的视图合成以及屏幕生命周期。