2011-05-12 76 views
1

好的,这是我的情况: 我有一个DataGridView包含Message s,应用以下样式。当内容发生变化时DataGridView风格不更新

<Style x:Key="ChangeSetRowStyle" TargetType="{x:Type DataGridRow}"> 
    <Setter Property="FontWeight" Value="Normal" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsRead}" Value="False"> 
      <Setter Property="FontWeight" Value="Bold" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsRead}" Value="True"> 
      <Setter Property="FontWeight" Value="Normal" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

我的意图是使未读消息变为粗体,而读取消息保持正常的字体重量。即使加载集合时正确应用了样式,但当物品的IsRead属性发生更改时,没有任何更改。这似乎是风格只是不更新​​。

有人可以请说一说吗?谢谢!

+2

你的'Message'类是否继承自'INotifyPropertyChanged'?你的'IsRead'属性会引发PropertyChanged事件吗? – Rachel 2011-05-12 13:15:38

+0

@Rachel,事实上它不是。今晚晚些时候我会再试一次。我甚至不知道我必须继承那个接口。如果只是它不是评论,我会将其标记为答案。 – rdumont 2011-05-19 19:20:32

+0

我发布了它作为答案:) – Rachel 2011-05-19 19:34:54

回答

2

Message类需要从INotifyPropertyChanged继承和IsRead属性需要修改的时候,以提高PropertyChanged事件。这里是一个例子:

public class Message: INotifyPropertyChanged 
{ 
    private bool _isRead; 

    public bool IsRead 
    { 
     get { return _isRead; } 
     set 
     { 
      _isRead = value; 
      RaisePropertyChanged("IsRead"); 
     } 
    } 


    #region INotifyPropertyChanged Members 

    /// <summary> 
    /// Raised when a property on this object has a new value. 
    /// </summary> 
    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

    /// <summary> 
    /// Raises this object's PropertyChanged event. 
    /// </summary> 
    /// <param name="propertyName">The property that has a new value.</param> 
    public virtual void RaisePropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      var e = new PropertyChangedEventArgs(propertyName); 
      handler(this, e); 
     } 
    } 
} 
+0

谢谢!这工作完美。 – rdumont 2011-05-20 01:07:27

0

您必须指定,当你想刷新绑定值:

<Style.Triggers> 
     <DataTrigger Binding="{Binding IsRead, UpdateSourceTrigger=PropertyChanged}" Value="False"> 
      <Setter Property="FontWeight" Value="Bold" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsRead, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
      <Setter Property="FontWeight" Value="Normal" /> 
     </DataTrigger> 
    </Style.Triggers> 

指定UpdateSourceTriggerPropertyChanged将更新值每次IsRead的价值变化。

相关问题