WPF: пользовательский ListBoxItem с DataTrigger - PullRequest
0 голосов
/ 27 октября 2009

У меня есть WPF ListBox, содержащий CheckBox es. Я хотел бы, чтобы цвет текста TextBox изменился на красный, когда ViewModel замечает, что теперь привязанное значение обновлено. У меня ниже XAML, но он не работает. Я вижу, что свойство IsUpdated запрашивается, но когда значение равно True, цвет не меняется. Я уверен, что упускаю что-то очевидное, но не могу понять это.

<ListBox MinHeight="100" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border Padding="2" SnapsToDevicePixels="true">
                <CheckBox x:Name="_checkBox" IsChecked="{Binding Path=IsAllowed}" Content="{Binding Item}"/>
            </Border>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsUpdated}" Value="True">
                    <Setter TargetName="_checkBox" Property="Foreground" Value="Red"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

1 Ответ

2 голосов
/ 27 октября 2009

Реализуете ли вы INotifyPropertyChanged (как упомянуто Мэттом Гамильтоном) в своем классе Item и вызываете событие PropertyChanged, когда вы устанавливаете IsUpdated из false в true и наоборот.

public class Item : INotifyPropertyChanged
{
    // ...

    private bool _isUpdated;
    public bool IsUpdated
    {
        get{ return _isUpdated; }
        set {
                _isUpdated= value;
                RaisePropertyChanged("IsUpdated");
            }
    }

    // ...
    /// <summary>
    /// Occurs when a property value changes.
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        if(PopertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    // ...
}
...