2013-07-13 86 views
0

目前,我有以下datatrigger:在DataGridWPF Datatrigger按钮上的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> 

我有两个问题。

目前,上面的触发器禁用了两个按钮,当我只希望它禁用删除按钮。将设置者的目标名称设置为删除按钮不起作用。我可以使触发器成为特定的按钮吗?

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

回答

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属性为您提供信息,如果网格有项目,并且用户选择其中一个。

+0

对'SelectedItem'的良好调用是'{x:Null}'触发器 - 没有想到这一点。 –

0

如果两个Button份额相同Style,因此具有相同的Trigger,然后他们都去相同的情况下被禁止(在这种情况下,当DataGrid有0项)。

为了在不同情况下禁用删除Button,您需要创建一个不同的Style与不同的Trigger并将该样式应用于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"/> 

至于触发启用删除按钮,只有当一个项目被选中,如果你不希望使用SelectedItems属性的CountDataGrid,那么你就需要使用Converter来确定网格的选择状态 - DataGrid上没有其他DependencyProperties,我知道这会为您提供信息离子。

此外,我不确定上下文没有更多的代码,但不相信你想在这种情况下DataTrigger - 你应该罚款与标准Trigger