Autor Beitrag
zappo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Mi 14.10.09 19:03 
Hallo Leute, grad verstehe ich die Welt nicht mehr.

Ich habe hier eine

ausblenden C#-Quelltext
1:
ObservableCollection<viewmodel> _collection = new ObservableCollection<viewmodel>();					


an diese habe ich in der window.xaml.cs via code mehrere felder gebunden.

ausblenden C#-Quelltext
1:
2:
3:
4:
textbox1.DataContext = _model1._collection;
textbox2.DataContext = _model1._collection; 
textbox3.DataContext = _model1._collection.ElementAt<viewmodel>(1); // das ElementAt um auf den zweiten Eintrag in 
textbox4.DataContext = _model1._collection.ElementAt<viewmodel>(1); //  der Collection zuzugreifen


In XAML dann natürlich an ein Feld innerhalb der Collection gebunden, alles wunderbar.
Ziel der Sache war es 2 x 2 Textfelder voneinander abhängig zu machen, brauchte das für ein Projekt udn wollte mich mit der Funtkionsweise vertraut machen.

Nun habe ich auf Buttonclick
ausblenden C#-Quelltext
1:
_model1._collection.Clear();					

durchgeführt und daraufhin erwartet das keine der Felder sich mehr gegenseitig aktualisieren, da ja das Objekt auf das Sie horchen nicht mehr da ist, aber Pustekuchen.
Die Felder welche ich via .... ElementAt gebunden habe, aktualisieren sich weiterhin selber! Nix gegen zu machen.

Woran liegt das?
Versteh ich die Funktion des .Clear() falsch???

Gruß


Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am Mi 14.10.2009 um 21:37
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 14.10.09 21:36 
ElementAt liefert dir eine Referenz auf eine ViewModel-Instanz zurück, die dann gebunden wird. Die ObservableCollection ist damit außen vor, durch welchen Mechanismus soll sie denn nachträglich diese Referenz umbiegen können?
So, wie du es dir vorstellst, kannst du das Problem wahrscheinlich nur lösen, indem du die Collection an die TextBox bindest und dir einen Value Converter schreibst, der dann das 2. Element daraus holt. Wenn du aber etwas genauer beschreibst, was du insgesamt vorhast, finden wir sicherlich eine bessere Lösung. Mit ItemsControls sollte sich da etwas machen lassen.

Ich verschiebe mal nach WPF, da ObservableCollection ja (leider) noch kein Bestandteil der BCL ist.

_________________
>λ=
zappo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Do 15.10.09 00:05 
Also ich hatte nichts konkretes vor.
Es ging mir nur um das Verständnis in Sachen ObservableCollections.

Offensichtlich ist es damit noch nicht so weit her.. :-/

Zum Verständnis, wenn ich eine ObservableCollection<object> habe, und dann via add einen eintrag hinzufüge, wird in der collection eine neue instanz des object erzeugt, oder?
Tue ich das öfter, liegen mehrere Instanzen des Objektes in der Collection.

Wie greife ich dann auf einzelne Elemente der ObservableCollection zu?
In meinem konkreten Fall geht es darum das ich in der Datenhaltung einen Typ habe, welcher pro Projekt 3 x vorkommen kann. Um nicht im Objekt alle Eigenschaften 3 mal liegen zu haben, wollte ich dies mit einer ObservableCollection lösen, welche dann einfach das Objekt mit dem Satz Eigenschaften 3 mal beinhaltet.

Diese Instanzen wollte ich binden um Zugriff darauf zu erhalten.
Object 2 und 3 sind dabei nur bedingt vorhanden, daher würde ich die Bindung gerne zur Laufzeit lösen können, also quasi ein einzelnes Objekt aus der Collection entfernen.
Mein Weg scheint ja nun nicht zu funktionieren... wobei ich auch nicht Recht verstehe, warum die Bindung an ein Objekt, welches ich referenziere erhalten bleibt, incl. Aktualisierungen, wenn ich die ObserableCollection, welche ja die INotifyPropertyChanged Schnittstelle implementierte, quasi ausradiere.

Gibt es also einen anderen Weg auf Elemente der ObservableCollection zuzugreifen, bzw. einzelne zu löschen?

Gruß
zappo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Do 15.10.09 00:24 
Ok... es ist eine Collection... das heisst ich kann auch einfach über den index [n] auf einzelne elemente zugreifen, dennoch scheint das Problem das ich dann nur eine Referenz erhalte fort zu bestehen...wie kann ich dies umgehen?