2016-06-15 3 views
0

Ich möchte eine Instanz anzeigen, die der Benutzer mithilfe einer Combobox auswählen kann. Die Combobox erhält alle Einträge von einer ObservableCollection<string> Names {get;set;} mit einer Bindung.Instanz des Objekts, um es zu binden und zu manipulieren?

Wie können Sie alle Eigenschaften dieser Instanz am besten mit einer Bindung anzeigen?

Meine Idee war es, eine ObservableCollection<Foo> Bar {get;set;} zu erstellen. Nun wurde der Benutzer beim Eintritt in die Combobox ausgewählt. Mit dem gewählten Namen suche ich die Instanz mit diesem Namen in ObservableCollection<Foo> Bar {get;set;} und kopiere sie in eine neue Instanz Foo TMPBar {get;set;}. Und diese Instanz sollte an die GUI gebunden werden.

Ist das eine gute Lösung?

+1

Verwenden Sie einfach die 'SelectedItem' -Eigenschaft der ComboBox. Es gibt bereits die ausgewählte 'Foo'-Instanz zurück. Keine Notwendigkeit, etwas zu kopieren. – Clemens

+0

@Clemens Das Problem ist, die ComboBox zeigt nur die Namen - von einer 'ObservableCollection'. Innerhalb dieser 'OberservableCollection' sind nur Namen. Nachdem ich einen Namen gewählt habe, suche ich die richtige Instanz innerhalb von 'ObservableCollection Bar {get; set;} '. Ist das der richtige Weg? – MyNewName

+0

Binden Sie die 'ItemsSource' der ComboBox an eine' ObservableCollection 'und setzen Sie ihren' DisplayMemberPath' auf die entsprechende Namenseigenschaft Ihrer Foo-Klasse. – Clemens

Antwort

0

Anstatt das Kombinationsfeld an eine Liste von Namen zu binden, binden Sie eine Liste der tatsächlichen Objekte und verwenden Sie die DisplayMemberPath -Eigenschaft der ComboBox, um nur den Namen anzuzeigen.

Dann haben Sie direkten Zugriff auf das Objekt über die SelectedItem Eigenschaft.

So werden Sie brauchen:

public ObservableCollection<Foo> Bar { get; set; } 
public Foo Selected { get; set; } 

Ihrer Ansicht nach Modell und:

<ComoboBox ItemsSource="{Binding Bar}" 
      DisplayMemberPath=Name 
      SelectedItem="{Binding Selected}" /> 

aus Ihrer Sicht.