【问题标题】:how to make checkbox check and uncheck wpf如何使复选框选中并取消选中 wpf
【发布时间】:2012-12-28 11:32:29
【问题描述】:

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

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

并绑定数据网格

 datagrid1.ItemSource = dtData.DefaultView;

在数据表中我以01 的身份活跃,我想在Active = 0 时显示我的复选框

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

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

【问题讨论】:

  • 您是否为视图设置了上下文?您是否在对象上实现了INotifiyPropertyChanged 接口? Active 是布尔类型吗?
  • 我假设您的意思是“将 Active 设为零和一”,所以我也编辑了该行。
  • @ChrisF:我没有使用 INotifiyPropertyChanged 接口

标签: c# wpf ivalueconverter


【解决方案1】:

IsChecked 需要一个布尔值(真/假),但表包含数字类型。您需要在绑定语句中添加一个 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
}

【讨论】:

  • 我正在使用 UserControl 进行我的设计。如何使用 windows.resource
  • 将 UserControl.Resource 替换为 Windows.Resource。 Resource 是其父对象的参数,因此您需要指定父对象的类型,就像使用 DataGrid.XYZ 一样
【解决方案2】:

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

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

它对我来说很好用。

【讨论】:

    【解决方案3】:

    如果有帮助,试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2014-08-07
      相关资源
      最近更新 更多