2010-11-20 8 views
0

私はC#を初めて使い、単純なCrudアプリケーションを構築してMVVMを学びたいと思っています。私のアプリケーションでは、ユーザーがクリックするとそのユーザーコントロールを読み込む一連のボタンが必要です。したがって、 "Add Item"をクリックすると、既存のコントロールがAddItemViewに置き換えられます。私はこれについてどうやって行くのだろうか?これまでに見たmvvmチュートリアルの多くは、MainMindowのコントロールをひとつだけ持っています。MVVMコントロールを交換する

答えて

3

この種のタスクでは、通常ContentControlを使用します。コントロールのContentプロパティをViewModel(たとえばCurrentViewModel)のプロパティにバインドし、ContentControlに表示できるViewModelの各タイプのリソースにDataTemplatesを定義します。 ViewModelをCurrentViewModelに割り当てると、ContentControlはコンテンツに対して適切なDataTemplateを選択します。あなたのケースでは

メインのViewModel

private object _currentViewModel; 
public object CurrentViewModel 
{ 
    get { return _currentViewModel; } 
    set 
    { 
     if (value != _currentViewModel) 
     { 
      _currentViewModel = value; 
      OnPropertyChanged("CurrentViewModel"); 
     } 
    } 
} 

App.xaml

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:AddItemViewModel}"> 
     <v:AddItemView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:FooViewModel}"> 
     <v:FooView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:BarViewModel}"> 
     <v:BarView /> 
    </DataTemplate> 
    ... 
</Application.Resources> 

メインビュー

... 
<ContentControl Content="{Binding CurrentViewModel}" /> 
... 

、中コマンドを使用して「項目を追加」ボタンをクリックすると、AddItemViewModelのインスタンスがCurrentViewModelに割り当てられます。

+0

単純なデータオブジェクトではなく、アイテムのグループといくつかの機能があります。私はViewModelsの代わりにUserControlsを切り替えることができ、各UserControlは独自のViewModelを持つことさえできますか? –