0

我有一个数据网格,我正在以编程方式向其中添加一个复选框列。在此列中,我有一个需要绑定的枚举,但由于 checkboxcolumn 将仅采用 bool 值,因此我正在使用转换器。当我的目标复选框更改时,我还需要更新我的源。虽然当我选中复选框时我的代码正在更新我的源代码,但是一旦我失去焦点,选中的(勾号)就会消失。如何使复选框的检查保持不变?

我尝试了其他UpdateSourceTrigger值,但它不起作用。

以下是复选框列的代码

        Binding binding = new Binding("GridCRUDStatus") { Converter = new CheckBoxColConverter(), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.Explicit };
        DataGridCheckBoxColumn chkCol = new DataGridCheckBoxColumn() { Header = "Select", Binding = binding };

转换器类

internal class CheckBoxColConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        GridCRUDStatus status;
        if (Enum.TryParse<GridCRUDStatus>(value.ToString(), out status))
        {
            if (status == GridCRUDStatus.Selected)
                return true;
        }

        return false;
        //throw new NotImplementedException();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool chkValue;
        if (Boolean.TryParse(value.ToString(), out chkValue))
        {
            if (chkValue)
                return GridCRUDStatus.Delete;
        }
        return GridCRUDStatus.Read;

        //return null;
    }

    #endregion
}

我尝试在网上搜索但无法找到解决方案。如果您需要我提供的任何进一步信息,请告诉我。

请帮忙!提前致谢。

问候,

萨马尔

4

1 回答 1

0

我得到了我的问题的解决方案。在“Convert”方法中,我检查是否选择了 GridCRUDStatus,然后返回 true,在“ConvertBack”方法中,我正在检查值是否为 true,然后返回 GridCRUDStatus.Delete,这是再次调用“Convert”方法并再次返回 false,这是取消选中复选框。

问候,

达瓦尔小号

于 2012-09-11T06:36:33.260 回答