wpf datagrid复选框列标题取消/全选
我正在尝试创建一个带有复选框列的数据网格,该列的标题带有一个用于选择和取消选择行复选框的复选框。我也尝试在没有后台代码的情况下做到这一点。 到目前为止,我已经部分成功,因为我使用数据网格的标签作为绑定中的中间人,并且可以使用数据触发器从标题复选框中取消/选择行的复选框,但是一旦我检查一行,该行中的绑定“死”并且不再受标头影响。另外,我已经尝试过使用单向绑定而不是数据触发器,并得到了相同的结果...... 有谁知道一种方法可以使绑定保持活动状态或使用另一种方法来实现我只在寻找 inxaml 的效果。
标题:
<CheckBox IsChecked="{binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}, Path=Tag}"/>
列模板:
<CheckBox>
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<DataTrigger Binding="{binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}, Path=Tag}" Value="True">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}, Path=Tag}" Value="False">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这实际上是解决这个问题的好主意。我不明白为什么这不起作用。
也就是说,有一些事情可以尝试:
通常将标题复选框和行复选框放在窗口上(而不是在 DataGrid 内),以查看其效果。
另一种选择是尝试命名标头复选框(例如),然后使用
{Binding ElementName=cbxHeader Path=Tag}。
另外,在测试时检查 Visual Studio 中的“输出”窗口(在运行时,“调试”>“窗口”>“输出”;它可能显示为空,但只是向上滚动)以获取有关绑定失败原因的任何消息。
您还可以使用虚假的
ValueConverter
来尝试查看绑定是否仍在触发。That is actually very good idea to solve that problem. I can't see why that shouldn't work.
That said, there are a few things to try:
Place your header checkbox and the row checkbox on a window normally (not inside a DataGrid) to see what effect that has.
The other option is to try naming the Header checkbox (for example
<CheckBox Name="cbxHeader"
) and then binding to it with{Binding ElementName=cbxHeader Path=Tag}
.Also, check the "Output" window in Visual Studio while you are testing (while it is running, Debug > Windows > Output; it might appear empty but just scroll up) for any messages about why the bindings are failing.
You can also use a bogus
ValueConverter
to try and see if the bindings are still firing.