2011-06-23 164 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

相關問題