Ich bin auf ein interessantes Thema gestoßen, für das ich noch keine Erklärung gefunden habe ...
In Anbetracht der sehr einfachen MVVM-WPF-Anwendung unten, warum wird die Liste nur dann an das Kombinationsfeld gebunden, wenn ihre Sichtbarkeit im ViewModel auf public
? festgelegt ist?
Durch das Ändern der TestList
-Sichtbarkeit in internal
wird bei der Kompilierung kein Fehler oder eine Warnung ausgegeben, das Kombinationsfeld bleibt jedoch zur Laufzeit leer.
Zitieren die offizielle Dokumentation : internal
types oder Mitglieder sind nur innerhalb von Dateien in derselben Baugruppe zugänglich.
Und dieses Problem tritt trotz der Tatsache auf, dass View und ViewModel in derselben Assembly definiert sind.
So sieht der Code aus:
Modell:
%Vor%Anzeigen:
%Vor%ViewModel:
%Vor% ViewModel
mit internal
access ist für View
sichtbar, aber für Binding
Klasse, die wirklich die Bindung funktioniert.
{Binding TestList}
wird in Binding
-Klasseninstanz umgewandelt, die keine Kenntnisse über internal
-Mitglieder Ihrer ViewModel
-Klasse hat.
Dies liegt daran, dass die Datenbindung Reflektionen verwendet, die sich wiederum auf die Sichtbarkeit von Elementen auswirken. Da die Datenbindung außerhalb Ihrer Assembly implementiert ist - innerhalb der WPF-Bibliotheken - kann sie nicht-öffentliche Member nicht sehen.
Die Bindung an ein nicht existierendes Mitglied gibt keinen Laufzeitfehler aus, sondern eine Debugausgabe mit einer Nachricht, die Details über das fehlende Mitglied enthält.