WPF, XAML: Comment le style d'un ListBoxItem à l'aide de la liaison sur la propriété de la zone de liste ItemsSource objet?

J'ai une ListBox qui est lié à ObservableCollection de LogMessages.

public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
    this.LogMessages = new ObservableCollection<LogMessage>();
}

Chaque Message possède deux paramètres:

public class LogMessage
{
    public string Msg { get; set; }
    public int Severity { get; set; }
    //code cut...
}

ListBox est se remplir avec les Éléments, et j'ai besoin de code couleur (changer un couleur d'arrière-plan de ListBoxItem) liste selon un Gravité paramètre d'une LogMessage élément.

Voici ce que j'ai maintenant dans le code XAML de contrôle de l'utilisateur en montrant le journal:

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

et d'une véritable zone de liste:

<ListBox IsSynchronizedWithCurrentItem="True" 
    ItemTemplate="{DynamicResource LogDataTemplate}" 
    ItemsSource="{Binding LogFacility.LogMessages}" 
    x:Name="logListBox" Grid.Row="1" 
    ItemContainerStyle="{StaticResource BindingAlternation}" />

La AlternationConverter est utilisé parce que la Gravité paramètre de message est de type Int (0..3), et on peut facilement basculer entre les styles à l'aide de celui-là.

Le concept est clair, mais pour l'instant il ne fonctionne pas pour moi. La couleur de Fond de ListBoxItem n'a pas changé.

  • Mon intuition est que cela a à voir avec {RelativeSource TemplatedParent}. Ne vous obtenez une erreur de liaison dans la fenêtre de sortie lors du débogage de l'application?
  • Il n'y avait pas de liaison des erreurs, mais malheureusement, vous avez raison, cela n'a rien à voir avec l'objet que je suis en train de référence. Étrangement aucune liaison des erreurs dans la fenêtre de sortie.
InformationsquelleAutor Igor Malin | 2009-08-20