WPF MVVM Single ViewModel за показване и редактиране

Използвам примера от Джош Смит. Той има WorkspaceViewModel, който показва списък с CustomerViewModel. Той използва един и същ ViewModel за показване на всички клиенти и за редактиране на един единствен клиент.

Това добра практика ли е? Ако имам списък с CustomerViewModels, нямам нужда от SaveCommand или CloseCommand или някакъв флаг IsSelected.

По-добре ли е да имате отделен 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;    
}

Редактиране: Опитвам се да изясня проблема си. В CustomerViewModel в примера на Джош Смит той има команди за затваряне и запазване на клиент. В AllCustomerView той има GridView, който се свързва с ObservableCollection от CustomerViewModels. Но в GridView и двете команди не са необходими. В GridView мога да игнорирам и двете команди, но това добър дизайн ли е?


person LuckyStrike    schedule 14.01.2013    source източник
comment
от вашите опции a е този, който трябва да изберете, в опция b costumer е модел, а не viewmodel, а в c е по наследство, трябва да разделите viewmodels по изгледи.   -  person ZSH    schedule 14.01.2013
comment
Ако е Джош Смит, тогава да, това е добра практика.   -  person Big Daddy    schedule 14.01.2013


Отговори (1)


Не съм съвсем сигурен какво имате предвид, тъй като бърз преглед на тази статия показва, че той използва както списък, така и модален изглед за преглед/редактиране, наречен съответно AllCustomers­ViewModel и CustomerViewModel. Което със сигурност би било препоръчителната практика, вместо да се използва един модел на изглед, който има повече от една отговорност.

И двата модела на изглед наследяват от WorkspaceViewModel, което добавя неговата функционалност на работното пространство. Така че, в обобщение, бих следвал неговия модел, ако искате да изградите нещо подобно. Трябва също сериозно да помислите за MVVM рамка като Caliburn.Micro, която добавя лесна композиция на изглед, базирана на конвенцията, както и екран кръговат на живота.

person devdigital    schedule 14.01.2013