Hallo Leute,
ich habe mich gerade mit dem hervorragenden Webcast von Bernd Marquardt (http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0809-01.mspx) in das Databinding eingearbeitet.
Zur Übung habe ich eine kleine Applikation geschrieben, welche folgendes macht:
Es können x Veranstaltungen definiert werden, konkret Poker-Turniere, welche regelmässig statt finden, dazu können pro Veranstaltung eben X Sitzungen definiert werden. Nachfolgend ist eine Veranstaltung ein Event und eine Sitzung eine Session.
In der Listbox zur Auswahl der Veranstaltung sieht mein Template so aus:
Daher, wenn der Gewinn negativ ist, wird die Zahl rot dargestellt, ansonsten grün.
Ich nehme an, dies wäre evtl. auch durch Trigger möglich, allerdings habe ich nicht rausgefunden, ob man irgendwie auf >= oder so etwas ähnliches prüfen kann bei Value.
Das Problem ist nun, dass Profit ein ReadOnly Property ist, welches sich im Event durch alle Sitzungen berechnet:
Dadurch bekommt aber das Binding nicht mit, wenn sich der Proft eines Events ändert. Ich kann zwar das INotifyChanged bei der Sitzung implementieren, aber dem Event ist dies ja egal.
Gibt es da eine einfache Möglichkeit dies irgendwie weiterzuleiten, dass sich da etwas geändert hat, obwohl das Property ReadOnly ist?
Wie immer vielen Dank im Voraus
Müller Matthias
ich habe mich gerade mit dem hervorragenden Webcast von Bernd Marquardt (http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0809-01.mspx) in das Databinding eingearbeitet.
Zur Übung habe ich eine kleine Applikation geschrieben, welche folgendes macht:
Es können x Veranstaltungen definiert werden, konkret Poker-Turniere, welche regelmässig statt finden, dazu können pro Veranstaltung eben X Sitzungen definiert werden. Nachfolgend ist eine Veranstaltung ein Event und eine Sitzung eine Session.
In der Listbox zur Auswahl der Veranstaltung sieht mein Template so aus:
Code:
<Window.Resources>
<code:EventsTemplateSelector x:Key="eventTempSel" />
<DataTemplate x:Key="dtPositive">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" FontSize="20" />
<TextBlock Text="{Binding Path=Description}" FontSize="16" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="Gewinn: " />
<TextBlock x:Name="txtProfit" Text="{Binding Path=Profit}" Foreground="Green" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Sitzungen: " />
<TextBlock x:Name="txtSessions" Text="{Binding Path=SessionsCount}" />
</StackPanel>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=SessionsCount}" Value="0">
<Setter TargetName="txtSessions" Property="Text" Value="Keine Sitzungen" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate x:Key="dtNegative">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" FontSize="20" />
<TextBlock Text="{Binding Path=Description}" FontSize="16" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="Gewinn: " />
<TextBlock x:Name="txtProfit" Text="{Binding Path=Profit}" Foreground="Red" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Sitzungen: " />
<TextBlock x:Name="txtSessions" Text="{Binding Path=SessionsCount}" />
</StackPanel>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=SessionsCount}" Value="0">
<Setter TargetName="txtSessions" Property="Text" Value="Keine Sitzungen" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Window.Resources>
Daher, wenn der Gewinn negativ ist, wird die Zahl rot dargestellt, ansonsten grün.
Ich nehme an, dies wäre evtl. auch durch Trigger möglich, allerdings habe ich nicht rausgefunden, ob man irgendwie auf >= oder so etwas ähnliches prüfen kann bei Value.
Das Problem ist nun, dass Profit ein ReadOnly Property ist, welches sich im Event durch alle Sitzungen berechnet:
Code:
public int Profit
{
get
{
return calculateProfit();
}
}
private int calculateProfit()
{
int profit = 0;
foreach (Session s in Sessions)
profit += s.Profit;
return profit;
}
Dadurch bekommt aber das Binding nicht mit, wenn sich der Proft eines Events ändert. Ich kann zwar das INotifyChanged bei der Sitzung implementieren, aber dem Event ist dies ja egal.
Gibt es da eine einfache Möglichkeit dies irgendwie weiterzuleiten, dass sich da etwas geändert hat, obwohl das Property ReadOnly ist?
Wie immer vielen Dank im Voraus
Müller Matthias