如何在属性上调用样式选择器更改行

本文关键字:选择器 样式 调用 属性 | 更新日期: 2023-09-27 17:55:58

我有带有数据网格的RowStyleSelector。它在加载窗口时正确调用。当我调用属性更改时,行的更改不会被调用。

<DataGrid Grid.Row="2" ColumnWidth="*"  ItemsSource="{Binding TraceItemCollectionViewSource , Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}" EnableRowVirtualization="false"  RowStyleSelector="{StaticResource TraceRowStyleSelector}" IsReadOnly="True" Name="TraceDataGrid" Margin="5,5,5,5" Padding="5,5,5,5" AutoGenerateColumns="False">

这是我的模型:

public class TraceDataItem :  ObservableObject
{
    private string _newReelId;
    public string NewReelId
    {
        get { return _newReelId; }
        set
        {
            if (value != _newReelId)
            {
                _newReelId = value;
                RaisePropertyChanged("NewReelId");
            }
        } 
    }

}

PropertyChanged("NewReelId")被调用时,我如何使RowStyleSelector被调用.

谢谢。

如何在属性上调用样式选择器更改行

StyleSelector不侦听PropertyChange通知。但是,您可以改用基于布尔属性的DataTrigger

bool _reelIdChanged;
public bool ReelIdChanged 
{
    get { return _reelIdChanged; }
    set
    {
        _reelIdChanged = value;
        RaisePropertyChanged("ReelIdChanged");
    }
}
private string _newReelId;
public string NewReelId
{
    get { return _newReelId; }
    set
    {
        if (value != _newReelId)
        {
            _newReelId = value;
            ReelIdChanged = true;
            RaisePropertyChanged("NewReelId");
        }
        else
            ReelIdChanged = false;
    } 
}

XAML:

<Window.Resources>
    <Style TargetType="DataGridRow" x:Key="TraceRowStyle">
        <Setter Property="Background" Value="{DynamicResource DataBackground}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=ReelIdChanged }" Value="True">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

    <DataGrid Grid.Row="0" 
              ColumnWidth="*"  
              ItemsSource="{Binding TraceItemCollectionViewSource  , Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}" 
              EnableRowVirtualization="false"  
              RowStyle="{StaticResource TraceRowStyle}" 
              IsReadOnly="True"
              Name="TraceDataGrid" 
              Margin="5,5,5,5" 
              Padding="5,5,5,5" 
              AutoGenerateColumns="False"/>