WPF DataTrigger不起作用

nik*_*hil 0 c# wpf datatrigger

我有一个按钮,其中enabled属性应该发生两次。在视图模型中,如果IsEnabled属性设置为false,则应禁用该按钮,这样效果很好。另一方面,当禁用UI中的“验证”按钮时,也应禁用该按钮,该按钮不起作用,这表示数据触发器不起作用。请帮忙。

<Button x:Name="BtnValidate" Content="Validate" Height="24" VerticalAlignment="Top" Grid.Column="2" Width="83" Command="{Binding ValidateCommand}" IsEnabled="{Binding IsValidateEnabled}" HorizontalAlignment="Left" Margin="8,28,0,0" />
    <Button Name="BtnReload" IsEnabled="{Binding IsEnabled}" HorizontalAlignment="Left" Width="123" Grid.Row="0" Grid.Column="5" Content="Reload" Command="{Binding DateCommand}" Margin="8,24,0,32">
                        <Button.Style>
                            <Style TargetType="Button">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=BtnValidate,Path=IsEnabled}" Value="False">
                                        <Setter Property="IsEnabled" Value="False"></Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Button.Style>
                    </Button>
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 5

性质在中设置<Tag>的对象采取precendence过的任何属性集<Style>,所以你的情况IsEnabled="{Binding IsEnabled}"总是会被使用。有关更多信息,请参见MSDN的依赖项属性优先级列表

解决方案是将IsEnabled属性移出标签定义并移至样式中,因为“触发器”中设置的属性优先于“标签”中设置的属性。<Style>

<Button Name="BtnReload" Content="Reload" Command="{Binding DateCommand}">
    <Button.Style>
        <Style TargetType="Button">
           <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=BtnValidate,Path=IsEnabled}" Value="False">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)