Стиль DataGridView не обновляется при изменении содержимого - PullRequest
2 голосов
/ 12 мая 2011

Хорошо, вот моя ситуация: у меня есть DataGridView, содержащий Message s, к которому применяется следующий стиль.

<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.Кажется, что стиль просто не обновляется.

Может кто-нибудь, пожалуйста, пролить свет на это?Спасибо!

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

Ваш класс 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 голосов
/ 12 мая 2011

Полагаю, ваш класс Message не вызывает событие OnPropertyChanged при изменении свойства IsRead. Вот простой пример того, как вы это делаете:

http://msdn.microsoft.com/en-us/library/ms743695.aspx

0 голосов
/ 12 мая 2011

Вы должны указать, когда вы хотите обновить значение привязки:

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

Указание UpdateSourceTrigger на PropertyChanged будет обновлять значение при каждом изменении значения IsRead.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...