MainWindow ist an MainViewModel
gebunden und der Rest ist an ChildViewModel
gebunden, was eine Eigenschaft von MainViewModel
ist. Jetzt im innersten untergeordneten Fenster, das an ChildViewModel
gebunden ist, möchte ich eine Eigenschaft an MainViewModel
binden.AncestorLevel funktioniert nicht beim Binden an das Ansichtsmodell des übergeordneten Fensters in WPF
Ich verwende den folgenden Code:
Hier ist der erste Wert des Converter
ist verpflichtet, Eigentum C
in ChildViewModel
und es funktioniert. Ich habe versucht, den zweiten Wert an eine Eigenschaft an den DataContext von MainWindow
(MainViewModel
) ohne Erfolg zu binden.
<MultiBinding Converter="{StaticResource UnitConverter}">
<Binding Path="C"/>
<Binding RelativeSource="{RelativeSource FindAncestor,
AncestorType={x:Type Window}, AncestorLevel=2}"
Path="DataContext.CurrentTargetUnit"/>
</MultiBinding>
--- Main Window -------------------------------------------
- ----- User Control 1 ------------------------------- -
- - ---- User Control 2-------------------------- - -
- - - ------ Child Window 1 ---------------- - - -
- - - - ----- Child Window 2 ---------- - - - -
- - - - - - - - - -
- - - - - [Bind to MainViewModel] - - - - -
- - - - - - - - - -
- - - - ------------------------------- - - - -
- - - -------------------------------------- - - -
- - --------------------------------------------- - -
- ---------------------------------------------------- -
-----------------------------------------------------------
Update:
Meine beste Vermutung ist, dass man nur an das übergeordnete Fenster binden kann und nicht mehr als das. Vielleicht ist das oberste Fenster nicht im visuellen Baum?
Es hat nicht funktioniert. Es scheint, dass das Elternfenster auf diese Weise nicht erkannt wird. Ich habe dies auch verwendet, um es ohne Erfolg zu überprüfen. '' – Vahid
@Vahid Wie instanziiert das Hauptfenster die untergeordneten Fenster? – OmegaMan
Das Ansichtsmodell des 'MainWindow' wird im Code dahinter instanziiert, und dann habe ich Benutzersteuerelemente im' MainWindow', deren Datenkontexte in XAML instanziiert und an untergeordnete Fenster im Code-Behind übergeben werden. Bis jetzt funktioniert alles sehr gut, abgesehen von diesem Problem, das ich das Elternfenster nicht erkennen kann. Ich kann "Child Window 1" von "Child Window 2" erkennen, aber keine obere. – Vahid