【问题标题】:DataGridTemplateColumn with CheckBox带有复选框的 DataGridTemplateColumn
【发布时间】:2012-01-14 18:26:04
【问题描述】:

我有一个动态 DataGrid,其中一列是 CheckBox。我创建了一个“事务”类,在其中我将数据网格的列绑定到该类中的不同属性。我希望我的复选框绑定到一个整数属性。它是一个整数,因为我正在将查询中的属性填充到我的数据库中。可能的整数是 1(真)或 0(假)。到目前为止,这是我创建数据库的内容:

    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 中选中该复选框。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您是否尝试过使用转换器.....即。将您的 int 值转换为布尔值...http://msdn.microsoft.com/en-us/library/system.windows.data.binding_properties.aspx 这个 lisnk 可能会帮助您处理属性Converter。

标签: c# wpf checkbox datagridtemplatecolumn frameworkelement


【解决方案1】:

您可以使用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 属性绑定,而是用上面的属性绑定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2013-09-09
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多