带CheckBox的DataGridTemplateColumn

时间:2012-01-14 18:26:04

标签: c# wpf checkbox datagridtemplatecolumn frameworkelement

我有一个动态DataGrid,其中一列是CheckBox。我创建了一个“Transactions”类,其中我将datagrid的列绑定到该类中的不同属性。我希望我的复选框绑定到一个整数属性。它是一个整数,因为我将查询中的属性填充到我的数据库中。可能的整数是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上,CheckBox显示但它们总是未选中,即使该属性显示为1.即使我进行行验证,显示该列的值也是正确的,包含1或行的ItemArray中的0。它只是由于某种原因未在UI中检查复选框。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用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属性bind