0

我的 IsEnabled 和 IsChecked 属性有一个多重触发器。它运行良好,只是在禁用复选框后,它不会通过代码重新启用。这是 XAML:

<ListView ScrollViewer.ScrollChanged="lstRewardsEarned_ScrollChanged" Height="178" HorizontalAlignment="Left" Margin="12,0,0,81" Name="lstRewardsEarned" VerticalAlignment="Bottom" Width="327" SelectionMode="Multiple" Background="White" FontFamily="Calibri" FontSize="16">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">

            <!-- bind content IsSelected to the ListViewItem IsChecked -->
            <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />

            <!-- bind content IsEnabled to the ListViewItem IsEnabled -->
            <Setter Property="IsEnabled" Value="{Binding Path=IsEnabled, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />

            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="Border" SnapsToDevicePixels="true">
                            <ContentPresenter />
                        </Border>

                        <ControlTemplate.Triggers>

                            <!--Highlight if IsSelected and IsEnabled-->
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsSelected" Value="True"/>
                                    <Condition Property="IsEnabled" Value="True"/>
                                </MultiTrigger.Conditions>
                                <MultiTrigger.Setters>
                                    <Setter TargetName="Border" Property="Background" Value="Cyan"/>
                                </MultiTrigger.Setters>
                            </MultiTrigger>

                            <!--Remove highlight if is not Selected and IsEnabled-->
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsSelected" Value="False"/>
                                    <Condition Property="IsEnabled" Value="True"/>
                                </MultiTrigger.Conditions>
                                <MultiTrigger.Setters>
                                    <Setter TargetName="Border" Property="Background" Value="Transparent"/>
                                </MultiTrigger.Setters>
                            </MultiTrigger>

                            <!--Add a trigger to remove the highlighting if IsEnabled is changed to false-->
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="Transparent"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

这是重新启用复选框的代码:

For Each checkBox As CheckBox In lstRewardsEarned.Items
    checkBox.IsEnabled = true

    'This writes out false!
    Console.WriteLine(checkBox.IsEnabled)
Next

提前致谢。

4

1 回答 1

0

从 IsEnabled 和 IsSelected 属性绑定中取出 UpdateSourceTrigger?

根据 MSDN

如果将 UpdateSourceTrigger 值设置为 Explicit,则必须调用 UpdateSource 方法,否则更改将不会传播回源。

于 2013-03-19T12:48:31.147 回答