0

我在数据网格中选择了复选框

<DataTemplate>
  <CheckBox x:Name="chkActive" IsChecked="{Binding Active, Mode=TwoWay}" 
    Style="{StaticResource checkboxStyleNormal}" IsEnabled="True"/>
 </DataTemplate>

并绑定数据网格

 datagrid1.ItemSource = dtData.DefaultView;

在数据表中,我得到了 Active as 0and 1,我想显示我的复选框何时被选中Active = 0

网格正在绑定,但我无法绑定复选框。

有人请告诉我如何根据我的情况显示复选框选中/取消选中。

4

3 回答 3

5

IsChecked 需要一个布尔值(真/假),但表包含数字类型。您需要将 ValueConverter 添加到将数值转换为布尔值的绑定语句。

检查How to bind a boolean to a combobox in WPF for the inverse case (convert an bool to an int). 在您的情况下, ValueConverter 应该是:

public class NumToBoolConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((int)value == 1);   
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool)value ? 1 : 0;
    }
}

}

更新

这篇文章有一个 NumToBoolConverter,它也进行类型和空值检查:

public class NumToBoolConverter : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        if (value!=null && value is int )
        {
            var val = (int)value;
            return (val==0) ? false : true;
        }
        return null;

    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        if (value!=null && value is bool )
        {
            var val = (bool)value;
            return val ? 1 : 0;
        }
        return null;
    }

    #endregion
}
于 2012-12-28T11:37:44.253 回答
0

我尝试在绑定到数据网格之前修改我的查询并将“案例”添加到我的查询中

Select ID ,DESC, CASE WHEN [STATUS] = 0 THEN 'True' WHEN [STATUS] = 1 THEN 'False' END AS  [Active], ORDER [Order] from tbldesc

它对我来说很好。

于 2013-01-04T12:29:24.940 回答
0

如果有帮助,试试这个:

  • 创建从 DataGridBoolColumn 派生的列
  • 覆盖 GetColumnValueAtRow (如果您希望列可编辑,则覆盖 SetColumnValueAtRow)
  • 使这些方法调用继承的实现以使用数据源,但进行一些预处理/后处理以分别将 0 和 1 转换为“false”和“true”。
于 2012-12-28T11:49:22.473 回答