带有复选框的DataGridTemplateColumn

本文关键字:DataGridTemplateColumn 复选框 | 更新日期: 2023-09-27 18:20:30

我有一个动态DataGrid,其中一列是CheckBox。我创建了一个"Transactions"类,在其中我将数据网格的列绑定到该类中的不同属性。我希望我的复选框绑定到一个整数属性。它是一个整数,因为我正在将查询中的属性填充到数据库中。可能的整数是1(True)或0(False)。以下是到目前为止我要创建的数据库:

    private DataGridTemplateColumn GetVoidColumn()
    {
        DataGridTemplateColumn voidColumn = new DataGridTemplateColumn();
        voidColumn.Header = "Void";
        Binding bind = new Binding("Visible");
        bind.Mode = BindingMode.TwoWay;
        // Create the CheckBox
        FrameworkElementFactory voidFactory = new FrameworkElementFactory(typeof(CheckBox));
        voidFactory.SetValue(CheckBox.IsCheckedProperty, bind);
        DataTemplate voidTemplate = new DataTemplate();
        voidTemplate.VisualTree = voidFactory;
        voidColumn.CellTemplate = voidTemplate;
        return voidColumn;
    }

在我实际的Datagrid中,复选框会显示,但它们始终处于未选中状态,即使属性显示1也是如此。即使在进行行验证时,该列显示的值也是正确的,在行的ItemArray中包含1或0。只是由于某种原因,UI中没有选中复选框。有人能帮我吗?

带有复选框的DataGridTemplateColumn

您可以使用Converters将属性值0和1转换为false和true。IsChecked属性可能不理解值0和1。创建一个实现IValueConverter的类,并应用该转换器将int转换为bool。

另一种选择可能是在你的类中为此创建一个属性

public bool IsChecked
{
   get
   {
       if(IntProperty == 0)
          return false;
       return true;
   }
   set
   {
       if(value)
          IntProperty = 1;
       else 
          IntProperty = 0;
   }
}

现在不再使用int属性绑定,而是使用之上的属性绑定

相关文章:
  • 没有找到相关文章