XAML DataTrigger 未触发?

XAML DataTrigger Not Firing?

我的 ModularClientModule class 中有一个名为 ExistsOnDisk 的 属性。当 属性 设置为 false 时,我想禁用 CheckBox。出于某种原因,尽管我将它放在 Triggers XAML 块的最后,但这似乎不起作用,这意味着它应该是最后触发的东西。即,不应有任何干扰。 我知道我的代码隐藏应该是正确的,因为正如您将在下面看到的,我有另一个控件可以接收更新并正常触发。

这里的这个响应 ExistsOnDisk 属性 更改没有问题,并删除了文本:

GridViewColumn x:Name="FileNameHeader" Header="File Name">
<GridViewColumn.CellTemplate>
    <DataTemplate DataType="{x:Type local:ModularClientModuleUI}">
        <TextBlock Text="{Binding Filename}">
            <TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ExistsOnDisk}" Value="False">
                            <Setter Property="TextDecorations" Value="Strikethrough"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>

这里没有,复选框保持启用状态:

<GridViewColumn x:Name="StatusHeader" Header="Status">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="{x:Type local:ModularClientModuleUI}">
            <StackPanel>
                <CheckBox x:Name="ClientModuleStatusCheckBox" Margin="5, 0" Click="ClientModuleStatusCheckBox_Click" IsEnabled ="{Binding Client.Online}">
                    <CheckBox.Style>
                        <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource MahApps.Styles.CheckBox}">

                            <Setter Property="IsEnabled" Value="False" />

                            <Style.Triggers>
                                <DataTrigger Binding="{Binding LoadState}" Value="Loaded">
                                    <Setter Property="IsChecked" Value="True" />
                                    <Setter Property="IsEnabled" Value="True" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding LoadState}" Value="Unloaded">
                                    <Setter Property="Visibility" Value="Visible" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding LoadState}" Value="Loading">
                                    <Setter Property="Visibility" Value="Collapsed" />
                                </DataTrigger>

                                <DataTrigger Binding="{Binding ExistsOnDisk}" Value="True">
                                    <Setter Property="IsEnabled" Value="True" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding ExistsOnDisk}" Value="False">
                                    <Setter Property="IsEnabled" Value="False" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </CheckBox.Style>
                </CheckBox>

这里可能发生了什么?

使用 Setter 设置 IsEnabled 的默认值并从 <CheckBox> 元素中删除 IsEnabled ="{Binding Client.Online}"

<CheckBox x:Name="ClientModuleStatusCheckBox" Margin="5, 0" Click="ClientModuleStatusCheckBox_Click">
    <CheckBox.Style>
        <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource MahApps.Styles.CheckBox}">

            <Setter Property="IsEnabled" Value="False" />

            <Style.Triggers>
                <DataTrigger Binding="{Binding LoadState}" Value="Loaded">
                    <Setter Property="IsChecked" Value="True" />
                    <Setter Property="IsEnabled" Value="True" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LoadState}" Value="Unloaded">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LoadState}" Value="Loading">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>

                <DataTrigger Binding="{Binding ExistsOnDisk}" Value="True">
                    <Setter Property="IsEnabled" Value="True" />
                </DataTrigger>

            </Style.Triggers>
        </Style>
    </CheckBox.Style>
</CheckBox>

另请注意,您不应在同一个 bool 属性.

上使用多个触发器