2015-10-14 82 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项目......谢谢! –

相关问题