2011-01-04 11 views
2

Im StockTraderRI Beispielcode das Ansichtsmodell von MEF injiziert wird, eine Eigenschaft mit:Prism/mef Ansichtsmodell: Pro und Contra von Eigentum gegen Ctor

[Export(typeof(IOrdersView))] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public partial class OrdersView : UserControl, IOrdersView 
{ 
    public OrdersView() 
    { 
    InitializeComponent(); 
    } 

    [Import] 
    [SuppressMessage("Microsoft.Design", "CA1044:PropertiesShouldNotBeWriteOnly", Justification = "Needs to be a property to be composed by MEF")] 
    public IOrdersViewModel ViewModel 
    { 
    set { this.DataContext = value; } 
    } 
} 

Was ich frage mich: Warum nicht eine ImportingConstructor wie diese verwenden, um injizieren, um das Ansichtsmodell:

[Export(typeof(IOrdersView))] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public partial class OrdersView : UserControl, IOrdersView 
{ 
    [ImportingConstructor] 
    public OrdersView(IOrdersViewModel ViewModel) 
    { 
    InitializeComponent(); 
    this.DataContext = ViewModel; 
    } 
} 

gibt es eine Besonderheit, Problem oder Grund, warum ich vermisse, warum die StockTraderRI Probe, die eine Immobilie anstelle einem Paramter zum ctor verwenden ist?

Antwort

5

Da in XAML teilweise definierte Typen nicht gut mit parametrisierten Konstruktoren funktionieren. XAML basiert auf dem Paradigma "Erstelle ein leeres Objekt und fülle die Eigenschaften danach aus".

+0

Gee, das war zu einfach für mich zu sehen :) Danke für die schnelle Hilfe! – Sam

+1

@Sam: Lustig ist, dass ich begann, eine viel längere Antwort für einen ähnlichen Fall zu schreiben, den ich selbst mit einem ViewModel-First-Ansatz angetroffen habe. Etwa auf halbem Weg wurde mir klar, dass das eine XAML-Sache ist, also habt ihr Gesellschaft :) – Jon

Verwandte Themen