![](/img/trans.png)
[英]WPF DataGrid DataTrigger Binding on DataContext property
[英]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.