Autor Beitrag
funcry
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: Di 15.02.11 10:22 
Liebes Forum,

Das folgende Binding ist Index-Basiert:

ausblenden 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:

ausblenden C#-Quelltext
1:
Path = new System.Windows.PropertyPath("Perc[2011]"null),					
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
2:
3:
public Foo CurrentFoo {
  get { return foos["thisfoo"]; }
}

_________________
>λ=
funcry Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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.:
ausblenden 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.