Mam ListBox, który jest powiązany z ObservableCollection z LogMessages.WPF, XAML: Jak ustawić obiekt ListBoxItem przy użyciu powiązania właściwości obiektu ListBox ItemsSource?
public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
this.LogMessages = new ObservableCollection<LogMessage>();
}
Każda wiadomość ma dwa parametry:
public class LogMessage
{
public string Msg { get; set; }
public int Severity { get; set; }
//code cut...
}
ListBox jest uzyskiwanie wypełnionych tych pozycji i muszę kolorowym kodem (zmiana koloru tło z ListBoxItem) Lista w zależności od parametru o parametrze LogMessage.
Oto co mam teraz w XAML kontroli użytkownika pokazujący dziennik:
<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>
i rzeczywistą ListBox:
<ListBox IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource LogDataTemplate}"
ItemsSource="{Binding LogFacility.LogMessages}"
x:Name="logListBox" Grid.Row="1"
ItemContainerStyle="{StaticResource BindingAlternation}" />
AlternationConverter jest używany, ponieważ parametr Ciężkość wiadomości jest typu Int (0..3) i możemy łatwo przełączać się między stylami za pomocą tego.
Koncepcja jest jasna, ale jak dotąd nie działa dla mnie. Kolor tła ListBoxItem nie zmienił się.
Podejrzewam, że ma to związek z {RelativeSource TemplatedParent}. Czy podczas debugowania aplikacji pojawiają się błędy wiązania w oknie wyjściowym? –
Nie było błędów wiązania, ale niestety masz rację, to nie ma nic wspólnego z obiektem, do którego próbuję się odwołać. Dziwnie nie ma wiążących błędów w oknie wyjściowym. –