2011-06-23 108 views
0

我试图创建一个数据网格与一个复选框列有一个复选框,选择和取消选择行的复选框的标题。此外,我正试图做到没有后面的代码。 到目前为止,我一直很成功,因为我使用datagrid的标签作为绑定中的中间人,并且可以使用数据触发器从头复选框中取消/选择行的复选框,但是一旦我检查了行中的绑定行'死亡',它不再受到头部的影响。此外,我已经尝试了一种方式绑定而不是数据触发器,并得到了相同的结果... 有谁知道一种方法来保持绑定活着或pheraps另一个达到我只寻找inxaml的效果。wpf datagrid复选框列标题取消/选择全部

头:

<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> 

回答

0

这实际上就是要解决这个问题非常好主意。我不明白为什么这不应该工作。

这就是说,有几件事情尝试:

将你的头复选框,并在窗口上的行复选框正常(不是DataGrid中),一看就知道有什么作用。

另一种方法是尝试命名Header复选框(例如<CheckBox Name="cbxHeader"),然后用{Binding ElementName=cbxHeader Path=Tag}绑定到它。当您正在测试时(在运行时,Debug> Windows> Output;它可能显示为空,但只是向上滚动),请检查Visual Studio中的“Output”窗口,以获取有关绑定失败的原因的任何消息。

您也可以使用伪造的ValueConverter来尝试查看绑定是否仍在触发。

+0

感谢您的评论!由于各种问题,我目前无法检查您的建议,但我希望推测一个小问题。 – SomeOtherGuy

+0

我试着检查输出已经发现没有绑定错误,我认为在列中使用元素名称时有问题,某些东西不是可视树的一部分,或者不是什么......我会试一试无论如何。我想当我检查一个单独的行时,我反驳了数据触发器,因此它从此被忽略。我对WPF很陌生,所以......这是合乎逻辑/可能的吗? – SomeOtherGuy

相关问题