为什么这个DataTrigger在PropertyChanged之后无效?

时间:2014-01-09 15:53:52

标签: wpf inotifypropertychanged datatrigger

以下触发器几乎按预期工作:

<Style.Triggers>
    <Trigger Value="True" Property="IsSelected">
        <Setter Property="Foreground" Value="White" />
    </Trigger>
    <DataTrigger Value="True" Binding="{Binding UpdateSourceTrigger=PropertyChanged, Converter={StaticResource InUseConverter}}">
        <Setter Property="Foreground" Value="OrangeRed" />
    </DataTrigger>
</Style.Triggers>

加载视图后,颜色正确 然后我在完成后执行async taks en我在绑定到datagrid-row的对象上赋予propertychanged。
但是为什么DataTrigger没有被触发(我必须刷新视图才能看到效果)?

编辑:
我的问题是我现在没有提供PropertyChanged的财产 有关数据网格的一些详细信息(ProjectsObservableCollection):

DataGrid SelectedItem="{Binding Project}" ItemsSource="{Binding Projects}">

绑定必须使用的对象Project的属性是:
Project.Variants[0].InUse

我也试过了触发器:

<DataTrigger Value="True" Binding="{Binding Path=Variants[0].InUse, Converter={StaticResource NotNullConverter}}">

<DataTrigger Value="True" Binding="{Binding Path=., Converter={StaticResource InUseConverter}}">

在视图模型中,我尝试过Project.Variants[0].InUse = null;

Project.OnPropertyChanged("InUse");
Project.Variants[0].OnPropertyChanged("InUse");
raisePropertyChanged("Project.Variants[0].InUse");
raisePropertyChanged("Variants[0].InUse");
raisePropertyChanged("Projects");
raisePropertyChanged("Project");
raisePropertyChanged("InUse");

2 个答案:

答案 0 :(得分:1)

最后它使用:

<DataTrigger Value="True" Binding="{Binding Path=Variants[0].InUse, Converter={StaticResource NotNullConverter}}">
  <Setter Property="Foreground" Value="OrangeRed" />
</DataTrigger>

Project.Variants[0].OnPropertyChanged("InUse");

答案 1 :(得分:0)

尝试在样式中设置Foreground属性,以便在运行时动态更改

<Setter Property="Foreground" Value="White"/>
<Style.Triggers>
    <Trigger Value="True" Property="IsSelected">
        <Setter Property="Foreground" Value="White" />
    </Trigger>
    <DataTrigger Value="True" Binding="{Binding UpdateSourceTrigger=PropertyChanged, Converter={StaticResource InUseConverter}}">
        <Setter Property="Foreground" Value="OrangeRed" />
    </DataTrigger>
</Style.Triggers>