Tengo un ListBox que está vinculado a ObservableCollection de LogMessages.WPF, XAML: cómo diseñar un ListBoxItem utilizando el enlace en la propiedad del objeto ListBox ItemsSource?
public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
this.LogMessages = new ObservableCollection<LogMessage>();
}
Cada mensaje tiene dos parámetros:
public class LogMessage
{
public string Msg { get; set; }
public int Severity { get; set; }
//code cut...
}
ListBox se está llena de esos artículos, y necesito código de color (cambiar un color fondo de ListBoxItem) Lista dependiendo de un Severity parámetro de un elemento de LogMessage.
Esto es lo que tengo ahora en XAML de control de usuario que muestra el registro:
<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>
y un cuadro de lista real:
<ListBox IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource LogDataTemplate}"
ItemsSource="{Binding LogFacility.LogMessages}"
x:Name="logListBox" Grid.Row="1"
ItemContainerStyle="{StaticResource BindingAlternation}" />
El AlternationConverter se utiliza porque el parámetro de Gravedad de mensaje es de tipo Int (0..3), y podemos cambiar fácilmente entre estilos usando ese.
El concepto es claro, pero hasta ahora no funciona para mí. El color de fondo de ListBoxItem no cambió.
Mi impresión es que esto tiene que ver con {} RelativeSource TemplatedParent. ¿Obtiene errores de enlace en la ventana de salida al depurar la aplicación? –
No hubo errores vinculantes, pero lamentablemente tiene razón, esto no tiene nada que ver con el objeto al que intento hacer referencia. Extrañamente no hay errores vinculantes en la ventana de salida. –