Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] ListView an ObservableCollection binden funktioniert nur ohne DisplayMemberPath
Hobby Programmierer
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: BW

Themenstarter:

[gelöst] ListView an ObservableCollection binden funktioniert nur ohne DisplayMemberPath

beantworten | zitieren | melden

Hallo,

wie im Titel schon angedeutet, versuche ich eine ListView an eine ObservableCollection zu binden.
Folgendermaßen funktioniert es auch:


ObservableCollection<Karte> Liste = new ObservableCollection();
public MainWindow()
{
   InitializeComponent();
            
   this.DataContext = Liste;
   Liste.Add(new Karte());
}

<ListBox ItemsSource="{Binding}" Grid.Column="0"/>

Da ich die ToString-Methode nicht überschrieben habe, erscheint auf diese Weise nur Namespace.Klassenname in der ListView.

Die Klasse Karte hat aber auch das Feld Name vom Typ string, und genau dieser String sollte in der ListView stehen.
Dann schreibe ich also im XAML:

<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" Grid.Column="0"/>

Und jetzt steht auf einmal nichts mehr in der Listview obwohl Name etwas enthält. Mein einziger Ansatzpunkt ist dieser Text in der Debug Ausgabe:
Fehler
System.Windows.Data Error: 40 : BindingExpression path error: 'Name' property not found on 'object' ''Karte' (HashCode=37504295)'. BindingExpression:Path=Name; DataItem='Karte' (HashCode=37504295); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

Name ist allerdings richtig geschrieben und öffentlich.

Vielen Dank im Voraus
Hobby Programmierer
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Hobby Programmierer am .
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Zitat
das Feld Name vom Typ string

Binden kannst Du nur public Propertys

Grüße
private Nachricht | Beiträge des Benutzers
Hobby Programmierer
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: BW

Themenstarter:

beantworten | zitieren | melden

Vielen Dank, so funktioniert es, wenn ich den String gekapselt habe.

Das war aber nur aus Testgründen so, dass direkt an die ObservableCollection gebunden wird.

Eigentlich soll an die Klasse Spiel gebunden werden,
die wieder das öffentliche Feld Spieler enthält, 1. Kann man Klassen kapseln, damit sie eine Property sind?
und erst dieser Spieler enthält dann die ObservableCollection. 2. Die ObservableCollection darf doch ein öffentliches Feld sein, oder?

Grüße im Voraus
Hobby Programmierer
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Wenn Du Spiel als DataContext nimmst, kannst Du dann mit {Binding Spieler.Liste} auf deine ObservableCollection (wobei Liste ein Proberty ind der Klasse Spieler ist).

Alles was Du bindest muss ein Property sein. In diesem Zusammenhang solltest Du dir auch einmal die impl. von INotifyPropertyChanged angucken.
private Nachricht | Beiträge des Benutzers
Hobby Programmierer
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: BW

Themenstarter:

beantworten | zitieren | melden

Nochmals Danke, nun habe ich es gelöst.

Ich dachte immer, ich könnte Klassen und Collections nur als Felder machen, und wusste nicht wie ich sie "explizit" kapseln könnte. Nun ist mir aufgefallen, dass es mit

{get; set;}
funktioniert. Ich muss einfach alles, was in dem Pfad zur Property auftritt, zu einer Property machen.

Grüße
HobbyProgrammierer

PS: INotifyPropertyChanged habe ich mir schon angeschaut
private Nachricht | Beiträge des Benutzers