2010-11-20 36 views
0

Ben C# için yeni ve basit bir Crud uygulaması yaparak MVVM öğrenmeye çalışıyorum. Uygulamamda, kullanıcı tıkladığında o kullanıcı kontrolünü yükleyecek bir dizi düğmeyi kullanmak istiyorum. Böylece "Öğe Ekle" ye tıkladığınızda, varolan denetimi AddItemView ile değiştirecektir. Bunun için nasıl gittiğimi merak ediyordum? Şimdiye kadar gördüğüm mvvm öğreticilerinin çoğu sadece MainMindow üzerinde tek bir kontrole sahipler.MVVM Swapping out denetimleri

cevap

3

Bu tür bir görev için genellikle ContentControl kullanın. Denetimin Content özelliğini, ViewModel'inizin (CurrentViewModel) bir özelliğine bağlayın ve ContentControl'da görüntülenebilen her bir ViewModel türü için DataTemplates tanımlayın. Bir ViewModel'i CurrentViewModel'a atarken, ContentControl içeriği için uygun DataTemplate seçecektir.

Ana 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> 

Ana görünüm Senin durumunda

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

, içinde "Öğe ekle" düğmesi için komut olarak, CurrentViewModel

+0

için bir örnek atadığınızda sadece basit bir veri nesnesi yerine sahip olduğumu varsayalım, bir grup öğe ve bazı özelliklerim var. ViewModels yerine UserControls değiştirebilir ve her bir UserControl bile kendi ViewModel ve benzeri olabilir? –