2009-10-27 3 views
0

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

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

Является ли ваша ViewModel реализацией INotifyPropertyChanged, поэтому привязка знает, когда IsUpdated изменился? –

+0

Да, я это делаю. –

+0

Можем ли мы увидеть код для вашего класса ViewModel? –

ответ

1

Вы реализации INotifyPropertyChanged (как было упомянуто Matt Hamilton) в классе Item и повышение события PropertyChanged при установке IsUpdated от ложного к истине, и наоборот.

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)); 
    } 

    // ... 
} 
+0

Yup Я делаю это. –