如何进行复选框检查并取消选中wpf

时间:2012-12-28 11:32:29

标签: c# wpf ivalueconverter

我在datagrid中选中了复选框

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

并绑定datagrid

 datagrid1.ItemSource = dtData.DefaultView;

在数据表中,我正在01处于“有效状态”,我希望在Active = 0

时显示我的复选框

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

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

3 个答案:

答案 0 :(得分:5)

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

检查How to bind a boolean to a combobox in WPF的相反情况(将bool转换为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;
    }
}

}

<强>更新

这个post有一个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
}

答案 1 :(得分:0)

如果有帮助的话,试试这个:

  • 创建一个派生自DataGridBoolColumn
  • 的列
  • 如果需要,覆盖GetColumnValueAtRow(和SetColumnValueAtRow) 您的专栏可编辑)
  • 让这些方法调用继承的实现来使用 数据源,但做一些前/后处理将0和1转换为“假” 和“真实的”。

答案 2 :(得分:0)

我尝试在绑定到datagrid之前修改我的查询,并将“case”添加到我的查询

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

它对我来说很好。