Ich habe eine ListBox, die an ObservableCollection von LogMessages gebunden ist.WPF, XAML: Wie style ein ListBoxItem mit Bindung für Eigenschaft von ListBox ItemsSource-Objekt?
public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
this.LogMessages = new ObservableCollection<LogMessage>();
}
Jede Nachricht hat zwei Parameter:
public class LogMessage
{
public string Msg { get; set; }
public int Severity { get; set; }
//code cut...
}
ListBox mit diesen Gegenständen gefüllt zu werden, und ich muss Farbcode (a Hintergrundfarbe ändern von ListBoxItem) Liste abhängig von Schweregrad Parameter eines LogMessage-Elements.
Hier ist, was ich jetzt in XAML der Benutzersteuerung haben das Protokoll zeigt:
<UserControl.Resources>
<AlternationConverter x:Key="BackgroundSeverityConverter">
<SolidColorBrush>Green</SolidColorBrush>
<SolidColorBrush>Yellow</SolidColorBrush>
<SolidColorBrush>Red</SolidColorBrush>
</AlternationConverter>
<Style x:Key="BindingAlternation" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background"
Value="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Severity,
Converter={StaticResource BackgroundSeverityConverter}}"/>
</Style>
<DataTemplate x:Key="LogDataTemplate">
<TextBlock x:Name="logItemTextBlock" Width="Auto" Height="Auto"
Text="{Binding Msg}"/>
</DataTemplate>
</UserControl.Resources>
und eine tatsächliche ListBox:
ist<ListBox IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource LogDataTemplate}"
ItemsSource="{Binding LogFacility.LogMessages}"
x:Name="logListBox" Grid.Row="1"
ItemContainerStyle="{StaticResource BindingAlternation}" />
Die AlternationConverter verwendet, da die Schwere Parameter der Nachricht vom Typ Int (0..3), und wir können problemlos zwischen den Stilen wechseln.
Das Konzept ist klar, aber bis jetzt funktioniert es nicht für mich. Die Hintergrundfarbe von ListBoxItem hat sich nicht geändert.
Meine Ahnung ist, dass dies mit {RelativeSource TemplatedParent} zu tun hat. Erhalten Sie verbindliche Fehler im Ausgabefenster beim Debuggen der Anwendung? –
Es gab keine verbindlichen Fehler, aber leider hast du recht, das hat nichts mit dem Objekt zu tun, auf das ich zu verweisen versuche. Seltsam keine verbindlichen Fehler im Ausgabefenster. –