繁体   English   中英

WPF Datatrigger on button基于datagrid

[英]WPF Datatrigger on button based on datagrid

目前,我有以下数据触发器:

<Style TargetType="Button">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=HasItems}"
                        Value="false">
            <Setter Property="Button.IsEnabled" Value="false"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

我有两个按钮,可以在数据网格中添加/删除一行

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"></Button>

我有两个问题。

目前,当我只想要禁用删除按钮时,上面的触发器会禁用这两个按钮。 将setter的targetname设置为delete按钮不起作用。 我可以将触发器定位到特定按钮吗?

此外,我希望删除按钮仅在选择网格项时启用,而不是检查项目计数。 这可能吗?

如果要将Style分配给适当的按钮,则应使用Style with key:

<Style x:Key="DeleteButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Button.IsEnabled" Value="True" />
    <Style.Triggers>              
        <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=SelectedItem}" Value="{x:Null}">
            <Setter Property="Button.IsEnabled" Value="False" />
        </DataTrigger>            
    </Style.Triggers>
</Style>

BtnDeletePoint按钮中,您应该添加样式:

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click" Style="{StaticResource DeleteButtonStyle}"></Button>

您可以编写触发器并检查SelectedItem是否为空,而不是检查HasItems并编写另一个触发器来检查网格是否已选择项目。 如果网格包含项目,并且用户选择了其中一项,则SelectedItem属性会为您提供信息。

如果两个Button共享相同的Style并因此具有相同的Trigger ,那么它们将在相同的情况下被禁用(在这种情况下,当DataGrid有0个项目时)。

为了在不同情况下禁用“删除” Button ,您需要使用不同的Trigger创建单独的Style ,并将该样式应用于BtnDeletePoint。 由于我没有看到你在按钮的声明中设置Style ,我猜测触发器属于Button的隐式样式,所以你需要为新样式分配一个x:Key ,这样你就可以分配它到你的删除按钮:

<Style x:Key="DeleteButtonStyle" TargetType="Button">
    <!-- Setters -->
    <!-- Triggers -->
</Style>

<Button Name="BtnDeletePoint" Style="{DynamicResource DeleteButtonStyle}" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"/>

至于在仅选择单个项目时启用删除按钮的触发器,如果​​您不想在DataGrid上使用SelectedItems属性的Count ,则需要使用Converter来确定选择状态。 grid - 我知道DataGrid上没有其他DependencyProperties可以为你提供这些信息。

另外,如果没有更多的代码,我不确定上下文,但是在这种情况下你不相信你想要一个DataTrigger - 你应该没有标准的Trigger

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM