2010-09-10 3 views
5

Wie kann ich ein UserControl mit einem ViewModel mit einem NON-Empty Konstruktor formatieren?DataTemplate ein ViewModel mit einem nicht leeren Konstruktor?

public PersonViewModel(Person person) 
{ 
    _person= person; 
    // do some stuff       
} 

Bindung dies in XAML wird als Ctor Absturz ist nicht leer. Aber wie ich Eltern/Kind-Beziehungen mit den ViewModels verwenden muss ich das Person-Objekt an den Konstruktor des ViewModel übergeben ...

Wie bewältigen Sie diese Situation?

+1

Ihre ViewModels können was auch immer Sie wollen. Es ist die Ansicht (z. B. Ihr Benutzersteuerelement), die ein Standardkonstruktor sein sollte. Es muss etwas anderes mit Ihrem Code nicht stimmen. Wie wäre es mit einem ausführlicheren Beispiel (das die Ansicht + XAML enthält) – bitbonk

Antwort

1
var person = new Person(); 
var viewModel = new PersonViewModel(person); 

var view = new EditPersonView(viewModel); // use overloaded constructor to inject DataContext 
// OR 
var view = new EditPersonView{ DataContext = viewModel }; 

Wenn Sie wirklich instantiate wollen der Ansicht-Modell in XAML, dann müssen Sie eine public Person Person Eigenschaft belichten und mit dem parameterlosen Konstruktor bleiben. Tun Sie einfach in der Person Setter, was Sie im Konstruktor getan hätten. Natürlich, jetzt haben Sie eine Dose Würmer geöffnet, weil Sie auch die Person in XAML mit einem parameterlosen Konstruktor instanziieren müssen und bald werden die Dinge sehr hässlich ...

+0

, wie Sie hässlich sagen ... keine Lösung in Sicht:/ – Elisabeth

+0

@Lisa Darf ich fragen, warum Sie das Ansichtsmodell vom XAML instanziieren möchten? Das macht die Sache chaotisch. – Jay

+4

, weil ich das nützlich finde: ................................ Elisabeth

Verwandte Themen