funcry - Di 15.02.11 10:22
Titel: WPF-DataGrid Binding dynamisch - KeyedCollection ?
Liebes Forum,
Das folgende Binding ist Index-Basiert:
C#-Quelltext
1:
| Path = new System.Windows.PropertyPath("Perc[" + i.ToString(System.Globalization.CultureInfo.CurrentCulture) + "]", null), |
Gibt es eine Möglichkeit eines Bindings welches ähnlich wie ein dictionary oder einer KeyedCollection funktioniert, also etwa so:
C#-Quelltext
1:
| Path = new System.Windows.PropertyPath("Perc[2011]", null), |
Kha - Di 15.02.11 11:13
Wo soll nun der Unterschied zwischen den zwei Zeilen liegen :gruebel: ?
Falls du auf ein wirkliches Dictionary zugreifen willst: Geht nicht ohne TypeConverter. Wobei ich dann eher eine neue Property im DataContext anlegen würde.
C#-Quelltext
1: 2: 3:
| public Foo CurrentFoo { get { return foos["thisfoo"]; } } |
funcry - Di 15.02.11 14:05
Zitat: |
Wo soll nun der Unterschied zwischen den zwei Zeilen liegen ? |
Das ist eine interessante Frage! Im ersten Fall ist es der Index von perc, im gewünschten Fall ist es eine jahreszahl, welche - da nummerisch - sich auch als index missbrauchen liese.
Das DataGrid wird hier gebunden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public class ResultsSession : INotifyPropertyChanged { [...] public ReadOnlyCollection<int> Years { get; private set; } public ObservableCollection<double> Perc { get; private set; } [...] } |
Das Property Years enthält eine Auflistung von Jahreszahlen, zu denen die zusätzlichen dynamischen Spalten gebunden werden. Habe ich nun 5 Jahre, enthält Perc auch nur 5 Werte. Diese Zuweisung erfolgt an andere Stelle:
C#-Quelltext
1: 2: 3: 4: 5:
| for (int i = 0; i < yearsCount; i++) { int year = Years.Min() + i; Perc.Add(((100 * resultsDays.Where(p => p.Blub.Year == year).Sum(r => r.Bla)) / resultsDays.Where(p => p.Blub.Year == year).Sum(r => r.Bla)) - 100); } |
Also irgenwie alles schon bisschen getrickst, und daher fehleranfällig.
Die Lösung die ich suche, müsste ein Binding zu meiner Klasse verwenden ohne zu tricksen. Also years könnte folgende Elemente enthalten: 2005, 2008, 2009. Zu diesen Spalten müsste ich dann die Ergebnisse in Perc speichern. z.B.:
C#-Quelltext
1: 2: 3:
| Perc[2005] = 12,23 Perc[2008] = 10,58 Perc[2009] = 5,49 |
Dann wäre der Index gleich meiner Jahreszahl. Würde vermutlich funktionieren, bisschen mehr getrickst, aber vermutlich besser.