2009-04-23 15 views
7

Sadece WPF'deki MVVM modeli ile çalışmaya başladım ve kodumu yapılandırmanın en zarif yolunun görünüm modelini yapının yapıcısına enjekte etmesine karar verdim.MVVM - Görünümün varsayılan bir kurucuya sahip olması gerekiyor mu?

Her şey yolunda ve iyi, ancak ReSharper, XAML'de görünümümün varsayılan bir kurucuya sahip olmadığına dair bir uyarı veriyor. Bunun, eğer gerekiyorsa XAML'de görünümümü oluşturabileceğimi varsayıyorum, ama bu sadece bir tahmindir.

Görüşümün yapıcıda bir görünüm modelini almasını gerektirerek ne vazgeçiyorum?

Düzenleme: Bence yapıcı şöyle görünür:

public ExampleView(ExampleViewModel viewModel) 
{ 
    if (viewModel == null) throw new ArgumentNullException("viewModel"); 
    DataContext = viewModel; 
} 

Cevap: Ben DesignTime ad test ve tasarım kez ViewModel sürümlerini kadar alay içerir nereye kurmak aşağıdaki yerleşmiş destek. Eğer tasarımcı desteğine ihtiyaç olmadığını varsayarsak

ExampleView.xaml.cs

public ExampleView() 
{ 
    InitializeComponent(); 
} 

public ExampleView(IExampleViewModel viewModel) 
    : this() 
{ 
    DataContext = viewModel; 
} 

ExampleView.xaml

<UserControl 
    x:Class="Wpf.Examples.ExampleView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:DesignTime="clr-namespace:Wpf.Examples.DesignTime"> 

    <UserControl.DataContext> 
     <DesignTime:ExampleViewModel/> 
    </UserControl.DataContext> 

</UserControl> 

cevap

8

Doğru bir şekilde tanımlandığınız gibi, varsayılan olmayan bir kurucu gerektiren XAML'den bu denetimi kullanarak sizi reddeder. Bu aynı zamanda daha fazla tasarım desteği yok demektir ve tasarımcılarınız muhtemelen sizden nefret edecektir. Son olarak, her türlü güzel veri bağlama senaryosunu kırıyorsunuz. Kontrolü ItemTemplate olarak kullanmak gibi.

eksik tasarım desteği için bir çözüm olarak, herhangi bir altyapıya ihtiyaç duymayan alay edilmiş bir görünüm modeli oluşturan bir varsayılan kurucuyu uygulamanızı öneririm. Bu sayede tasarım modunu çok zarif bir şekilde destekleyebilir ve görünümü bir XAML dosyasına (örneğin test için) koymanız mantıklı bir şey yapacaktır. destek bağlama eksik veriler için bir çare olarak

, uygulamanın WPF kontrolünün DataContext aracılığıyla görünümü modeli tüketmek daha iyi olabilir olup olmadığını düşünmek gerekir. Bu, WPF'de ve --- söyleyebildiğim kadarıyla - modeli WPF'deki görüntüye aktarmanın amaçlanan yolu.

+0

DataContext'i kurucuya ayarlıyorum, bunun için daha iyi bir şablon var mı? –

+1

Fabrika Kullanımı? DataContext'i manuel olarak ayarlayın Boş bir varsayılan kurucu oluşturun? –

0

sonra hiçbir nedenlere bakın.

0

Tasarımcı desteğini korumak için varsayılan bir kurucuya ihtiyacınız vardır. Kendi kurucunuzu tanımladığınızda, temelde otomatik olarak oluşturulmuş varsayılan yapıcıyı kaybedersiniz. Sadece açık bir varsayılan kurucu oluşturun ve iyi olmalısınız.

İlgili konular