Verbinde beobachtbare Sammlung mit ListBox in XAML

7

Ich habe viele Stunden mit diesem Problem verbracht.

Ich habe eine Klasse mit Daten:

%Vor%

Als nächstes habe ich eine Klasse mit observablecollection der Klasse userClass:

%Vor%

In der Tat, nach vielen Tests eine Bearbeitung, funktioniert ein großer Teil des Codes nicht, wie Serialisierung. Aber es ist nicht notwendig für die Datenbindung und Bindung ist, was ich jetzt löse.

Also ich habe diese Sammlung und möchte sie an listBox binden. Ich habe es auf verschiedene Arten versucht, aber ich habe es nicht zum Laufen gebracht.

Der letzte, den ich ausprobiert habe, gab mir den Schreibfehler:

  

Die Ressource 'Benutzer' kann nicht aufgelöst werden.

%Vor%     
prespic 07.10.2011, 13:49
quelle

2 Antworten

26

Einige Punkte zu beachten

  • Machen Sie die Eigenschaften public und nicht private .
  • Erstellen Sie Variablen private .
  • Folge Namenskonventionen und füge class nicht hinter der Klasse an.
  • ItemsSource , die Sie angeben, sollte gemäß dem Umfang der Daten sein, in meinem Beispiel die Benutzerliste im Klassenbereich und ich habe das ItemSource bei Window Loaded-Ereignis bereitgestellt.

Hier ist der vollständige Beispielcode, in dem ich das Grid Control in ListBox verschachtelt habe, weil Sie später die ListBox Eigenschaft für VirtualizingStackPanel ändern können. Es würde also einen enormen Leistungsgewinn bringen, wenn Sie auf der Liste viele Updates haben. Sie können auch BindingList verwenden, was meiner Meinung nach besser ist als ObservableCollection leistungsmäßig.

Benutzerklasse:

%Vor%

Benutzerlistenklasse:

%Vor%

XAML:

%Vor%

XAML-Code hinter:

%Vor%     
Harsh Baid 08.10.2011, 08:55
quelle
2

Sie müssen zwei Dinge tun:

Setzen Sie zunächst DataContext von beliebigem Element ( Window / UserControl / was auch immer) Ihr ListBox auf ein Objekt, das wie folgt aussieht:

%Vor%

Dies ist Ihr Ansichtsmodell, an das Sie binden möchten.

Zweitens, ändern Sie Ihre Bindung zu ItemsSource="{Binding Path=users}" . Dies bedeutet "setze den Wert meiner ItemsSource -Eigenschaft auf den Wert der Eigenschaft users auf this.DataContext . Da die DataContext vom übergeordneten Element geerbt wird, und Sie diese oben auf die Klasse ViewModel setzen, Ihr ListBox zeigt nun Ihre Benutzerliste an.

    
Steve Greatrex 07.10.2011 16:30
quelle