1

I am using the example from Josh Smith. He has a WorkspaceViewModel which display a list of CustomerViewModels. He is using the same ViewModel for displaying all Customers and for editing one single customer.

Is this a good practice? If I have a list of CustomerViewModels I dont need the SaveCommand or the CloseCommand or some IsSelected Flag.

Is it better to have a seperate EditCustomerViewModel? But how to deal with Workspace related stuff? For example:

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;    
}

Or seperation:

// 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;    
}

Edit: I try to clarify my problem. In the CustomerViewModel in the example of Josh Smith, he has Commands for closing and saving a customer. In the AllCustomerView he has a GridView that binds to a ObservableCollection of CustomerViewModels. But in the GridView the both commands are not necessary. In the GridView I can ignore both commands, but is that a good design?

4

1 に答える 1

0

その記事をざっと見てみると、彼がリストと、それぞれと呼ばれるビュー/編集ビュー モーダルの両方を使用していることがわかりAllCustomers­ViewModelますCustomerViewModel。複数の責任を持つ単一のビューモデルを使用するのではなく、これは確かに推奨される方法です。

これらのビュー モデルはどちらも、WorkspaceViewModel彼のワークスペース機能を追加したものを継承しています。つまり、要約すると、似たようなものを構築したい場合は、彼のパターンに従います。また、 Caliburn.Microなどの MVVM フレームワークを真剣に検討する必要があります。これにより、簡単な規則ベースのビュー構成と画面のライフ サイクルが追加されます。

于 2013-01-14T13:49:08.950 に答える