Wie sollte die Sichtbarkeit der ViewModel-Mitglieder aussehen?

8

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%     
Yannick Blondeau 13.03.2013, 21:08
quelle

2 Antworten

7

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.

    
MarcinJuraszek 13.03.2013, 21:11
quelle
6

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.

    
Roman Gruber 13.03.2013 21:11
quelle

Tags und Links