Autor |
Beitrag |
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 29.05.12 19:38
Irgendwie krieg ich das gerade mal wieder nicht hin:
Ich habe eine ObservableCollection mit Strings (AvailableStrings). Aus diesen soll der Benutzer eine Liste zusammen stellen können. Nun hab ich eine extra ObservableCollection SelectedStrings, die per Button erweiterbar ist. An diese Liste ist die ListBox gebunden. Der DataContext wurde auf die aktuelle Klasseninstanz festgelegt, damit ich direkt auf die Properties binden kann.
Im ItemTemplate der Listbox soll nun eine ComboBox die Werte aus Liste 1 zur Auswahl anbieten und den gewählten Wert in der zweiten Liste speichern.
Die ersten Schritte sind gemacht, aber die ComboBox speichert die Werte einfach nicht im aktuellen Element der Liste 2:
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| <ListBox Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ParentListBox" VerticalAlignment="Top" Width="177" ItemsSource="{Binding SelectedStrings}"> <ListBox.ItemTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding ElementName=ParentListBox,Path=DataContext.AvailableStrings}" HorizontalAlignment="Stretch" SelectedItem="{Binding .,Mode=TwoWay}"> </ComboBox> </DataTemplate> </ListBox.ItemTemplate> </ListBox> |
Bin ich irgendwie blind? 
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 29.05.12 21:21
Ein Two-Way-Binding an . kann genauso wenig funktionieren wie eine Zuweisung an this  . Das muss auf eine Property zielen, also solltest du deine Strings in eine mutable Dummy-Klasse wrappen, siehe z.B. hier, da hatten wir quasi das gleiche Problem.
_________________ >λ=
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 29.05.12 21:33
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 29.05.12 23:07
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 30.05.12 11:17
Ach, jetzt blick ichs, Du meinst Werte- und Referenztypen ... natürlich ...
Probier ich heute Abend gleich mal.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 30.05.12 12:41
Uh, ein Wertetyp sollte hier eigentlich nicht vorgekommen sein  .
_________________ >λ=
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 30.05.12 12:44
Kha hat folgendes geschrieben : | Uh, ein Wertetyp sollte hier eigentlich nicht vorgekommen sein . |
Wenn ich das richtig verstanden habe schon: Ich binde an einen String, der wird in .NET wie ein Werttyp behandelt, ein neuer Speicherbereich wird erzeugt und verändert, der nichts mehr mit dem in der Collection referenzierten zu tun hat.
Ansonsten würde die Sache mit einer eigenen Klasse ja auch zu nichts anderen führen.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 30.05.12 12:51
Was du meinst, ist Mutability/Immutability, was ich oben ja schon erwähnt habe. Structs implizieren aber weder Immutability noch anders herum (mutable Structs sind trotzdem böse und wären in diesem speziellen Fall auch keine Lösung).
_________________ >λ=
Für diesen Beitrag haben gedankt: UGrohne
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Do 31.05.12 16:03
Kha hat folgendes geschrieben : | Was du meinst, ist Mutability/Immutability, was ich oben ja schon erwähnt habe. Structs implizieren aber weder Immutability noch anders herum (mutable Structs sind trotzdem böse und wären in diesem speziellen Fall auch keine Lösung). |
OK, mit dem Thema hab ich mich noch nicht so beschäftigt, ich kann es mir mit dem Zeigerverhalten von .NET erklären, da wird das Szenario dann erklärbar. Jedenfalls war das Verpacken in eine "StringWrapper"-Klasse die Lösung für das Problem.
Danke!
|
|