Laden...

Binding auf null-Object

Erstellt von Fabian E. vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.404 Views
F
Fabian E. Themenstarter:in
258 Beiträge seit 2008
vor 12 Jahren
Binding auf null-Object

Hallo,
ich habe gerade ein kleines Binding Problem.
Folgendes Binding:

<ListView ItemsSource="{Binding Workspace.CurrentDocument.XmlEditorViewModel.XmlErrors}">

Klappt prinzipiell auch, Problem ist allerdings, dass zum Zeitpunkt von InitializeComponent() CurrentDocument == null ist.
Daher kommt kein Binding zustande. Das Output zeigt keine Fehler, trotzdem funktioniert es nicht.
Selbstverständlich soll es nur funktionieren, wenn CurrentDocument NICHT mehr null ist.

Gibt es eine Möglichkeit, dem Control mitzuteilen, dass es sein Binding nochmal 'überprüfen' oder neu erstellen soll?

Oder kann man gar nicht auf etwas binden, das null ist?

M
46 Beiträge seit 2010
vor 12 Jahren

Moin moin,

ist in deinem VM das INotifyPropertyChanged Interface implentiert und ruft das dein Property auf wenn sich der Wert ändert?

Mfg.
Mr. Bob

F
Fabian E. Themenstarter:in
258 Beiträge seit 2008
vor 12 Jahren

XMLErrors ist eine DependencyProperty.
Definition:

public static readonly DependencyProperty XmlErrorsProperty =
            DependencyProperty.Register("XmlErrors", typeof(ObservableCollection<M10XmlError>), typeof(M10Document));

Macht das in diesem Fall einen Unterschied zu INotify?

F
Fabian E. Themenstarter:in
258 Beiträge seit 2008
vor 12 Jahren

Achso, CurrentDocument ist natürlich auch eine DP:

public static readonly DependencyProperty CurrentDocumentProperty =
            DependencyProperty.Register("CurrentDocument", typeof(M10Document), typeof(WorkspaceViewModel), new PropertyMetadata(CurrentDocumentChanged));

Vor dem Aufruf von IntializeComponent() Sind alle Objekte bis Workspace erstellt. Der Rest (CurrentDocument und XMLErrors) ist null.

Workspace ist keine DP, sollte aber auch nicht erforderlich sein, Workspace wechselt nicht und ist vor InitializeComponent() schon vorhanden.

F
Fabian E. Themenstarter:in
258 Beiträge seit 2008
vor 12 Jahren

Okay, also das Ändern von XmlErrors von einer DP zu einer Property mit INotifyPropertyChanged hat geholfen, jetzt klappt es.

Kann mir jetzt vielleicht noch einer erklären, warum es mit einer DP nicht geht? Wäre echt gut zu wissen 😃

5.742 Beiträge seit 2007
vor 12 Jahren

Kann mir jetzt vielleicht noch einer erklären, warum es mit einer DP nicht geht? Wäre echt gut zu wissen

DependencyProperties haben in VMs nichts zu suchen - denn wenn ein DependencyObject nicht in einer UI-Hierarchie eingebaut ist, treten sehr viele, seltsame Phänomene beim Binding auf.
Ist halt einfach so 😉

F
Fabian E. Themenstarter:in
258 Beiträge seit 2008
vor 12 Jahren

Oh. Na dann werde ich jetzt mal ganz schnell ganz viele DPs umändern 😃 Danke 😃