WPF MVVM und verschachtelte Ansichten mit Abhängigkeitseigenschaften
-
05-07-2019 - |
Frage
Ich habe eine übergeordnete Ansicht, die eine Kinderansicht in XAML definiert. Die Kinderansicht hat eine DependencyProperty
Das ist an das ViewModel der Elternansicht gebunden. Dieser Wert wird jedoch auch durch das ViewModel der Kinderansicht benötigt.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
wird als Abhängigkeitseigenschaft der implementiert ChildView
Kontrolle. Wenn die ChildViewModel
Bedürfnisse ParentFooId
, Was ist der richtige MVVM -Weg, um es zu erhalten?
Ich möchte das nicht werfen DataContext
des ChildView
in ein ChildViewModel
und Wert in a festlegen OnChildIdChanged
Handler des ChildView
. Das scheint mir nicht sehr mvvm zu sein.
Die andere Alternative, an die ich dachte, war, eine neue zu schaffen ChildViewModel
mit dem Wert und setzen Sie ihn als die DataContext
in dem OnParentFooIdChanged
Ereignis (in der ParentViewModel
); Aber das scheint auch nicht ganz richtig zu sein, da die ViewModels der Aussicht nicht ahnungslos sein sollen (und daher nichts über nichts über wissen sollen DataContext
s).
Es scheint, als würde mir etwas Offensichtliches fehlen ...
Lösung
Wenn ich die Frage korrekt verstehe, müssen Sie nur das Modell für untergeordnete Ansicht innerhalb des übergeordneten Ansichtsmodells erstellen, indem Sie einen Verweis auf das übergeordnete Ansichtsmodell übergeben und behalten. Auf diese Weise können Sie auf jede Eigenschaft des übergeordneten Ansichtsmodells aus dem untergeordneten Ansichtsmodell verweisen und an beide in der Kinderansicht binden.
Andere Tipps
Wenn Sie einfach versuchen, Daten von einer Abhängigkeitseigenschaft an Ihr Ansichtsmodell zu übergeben, würde ich das Ereignis von PropertyChangedCallback verwenden. Fügen Sie einen Handler hinzu, der die geänderten Daten an Ihr Ansichtsmodell sendet. Ich kann Ihre Absicht jedoch missverstehen.