2015-10-14 84 views
1

我創建一個WPF DataGrid控制與DataGridTemplateColumn複選框應該具備哪些器isChecked屬性設置爲取決於DataTable)...WPF DataGridTemplateColumn - 觸發的複選框物業器isChecked

如果DataTable行的值設置爲,DataGridTemplateColumn應該是true(選中)。否則,這將是(未選中)...默認情況下,每一個新的行會被設置爲,但我不能這些CheckBox行綁定到我的DataTable值(這將是或)

我試過以下c#代碼。當我完成UserControl版本並通過我的DataTable循環以保存其值...但是,當我設置gridResultados.ItemsSource = dataTable.DefaultView顯然不檢查/取消選中我的CheckBoxes,因爲DataTable列之間沒有綁定值(1或2)和我DataGridTemplateColumn ...這是我最親密的做法:

<DataGrid> 
<DataGrid.Columns> 
<DataGridTemplateColumn Header="Value?" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="True" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"> 
       <Style TargetType="{x:Type CheckBox}"> 
        <Style.Triggers> 
         <Trigger Property="Content" Value="1"> 
          <Setter Property="IsChecked" Value="True"/> 
         </Trigger> 
         <Trigger Property="Content" Value="2"> 
          <Setter Property="IsChecked" Value="False"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </CheckBox> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
</DataGrid.Columns> 
</DataGrid> 
private void CheckBox_Checked(object sender, RoutedEventArgs e) 
{ 
    dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 1); 
} 

private void CheckBox_Unchecked(object sender, RoutedEventArgs e) 
{ 
    dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 2); 
} 

回答

0

首先,我建議你不要在WPF使用DataTable,因爲我們通常在WPF使用EF時,DataTable是是ADO.NET的一部分,它已經過時了,幾乎不推薦使用。

對於你的問題,你有一些解決涉及綁定和觸發器的問題。首先,隱含的DataContext在這裏是一個DataRowView。它僅適用於DataTrigger(不適用於Trigger)。因此,您需要使用DataTrigger代替偵聽索引[4](引用第五列 - CheckBox列)。第二Style你設置是錯誤的,它應該包裝在CheckBox.Style,使其明白,你設置爲CheckBox風格,而不是它的Content。第三Style觸發器無法在本地設置IsChecked(如在您的代碼中),在這種情況下,模板觸發器可以覆蓋該觸發器,但您也可以使用樣式設置器爲IsChecked設置默認值True。 這裏是你應該有代碼:

<DataGridTemplateColumn Header="Value?"> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"> 
      <CheckBox.Style> 
       <Style TargetType="{x:Type CheckBox}"> 
        <Setter Property="IsChecked" Value="True"/> 
        <Style.Triggers> 
        <DataTrigger Binding="{Binding [4]}" Value="1"> 
         <Setter Property="IsChecked" Value="True"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding [4]}" Value="2"> 
         <Setter Property="IsChecked" Value="False"/> 
        </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      <CheckBox.Style> 
     </CheckBox> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

BTW,我可以看到你使用事件處理程序來更新基礎數據的價值。但是這不是MVVM的正確方法,幾乎​​你需要的是綁定和相關的東西。不過那一部分是你的,你需要對此進行更多的研究。我認爲這足以在這裏結束這個問題。

+1

你好金剛, 它工作正如我想。我會做一些研究,以提高我的知識和我的WPF項目......謝謝! –

相關問題