WPF Datatrigger on button基于datagrid

时间:2013-07-13 13:21:29

标签: c# .net wpf triggers

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

<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按钮不起作用。我可以将触发器定位到特定按钮吗?

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

2 个答案:

答案 0 :(得分:2)

如果要将Style分配给适当的按钮,则应使用<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> 按钮中,您应添加样式:

HasItems

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

答案 1 :(得分:0)

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

为了在不同情况下禁用删除DataGrid,您需要创建一个具有不同Button的单独Style,并将该样式应用于BtnDeletePoint。由于我没有看到您在按钮声明中设置Trigger,我猜测触发器属于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"/> Count属性的SelectedItems,那么您需要使用DataGrid来确定网格的选择状态 - 我知道的Converter上没有其他DependencyProperties可以为您提供该信息。

另外,如果没有更多的代码,我不确定上下文,但在这种情况下你不相信你想要DataGrid - 你应该对标准DataTrigger没问题。< / p>