wpf datagrid复选框列标题de /选择全部

时间:2011-06-23 06:33:16

标签: wpf xaml binding wpfdatagrid

我正在尝试创建一个带有复选框列的数据网格,该列具有一个带有复选框的标题,该复选框选择并取消选中行的复选框。我也试图在没有代码的情况下做到这一点。 到目前为止,我已经获得了部分成功,因为我在绑定中使用了datagrid的标签作为中间人,并且可以使用数据触发器从标题复选框中选择行的复选框,但是一旦我检查了行中的绑定'死',它不再受标题的影响。此外,我已经尝试使用单向绑定而不是数据触发器并获得相同的结果... 有没有人知道一种方法来保持绑定活着或pheraps另一种方式来实现我正在寻找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>

1 个答案:

答案 0 :(得分:0)

解决这个问题实际上是个好主意。我不明白为什么那不起作用。

那就是说,有几件事要尝试:

将标题复选框和行复选框放在窗口上(通常不在DataGrid中)以查看其效果。

另一个选项是尝试命名Header复选框(例如<CheckBox Name="cbxHeader"),然后使用{Binding ElementName=cbxHeader Path=Tag}绑定它。

此外,在测试时(在运行时,调试&gt; Windows&gt;输出;它可能显示为空但只是向上滚动)检查Visual Studio中的“输出”窗口,查看有关绑定失败原因的任何消息

您还可以使用虚假ValueConverter来尝试查看绑定是否仍在触发。