WPF DataGrid组合框更改选择问题

时间:2018-01-15 21:14:24

标签: c# wpf data-binding combobox datagrid

我有一个DataGrid,其中一列有一个ComboBox:

    DataGridTemplateColumn colDataType = new DataGridTemplateColumn();
    colDataType.Header = "Type";
    var cboFactoryDT = new FrameworkElementFactory(typeof(ComboBox));
    cboFactoryDT.SetValue(ComboBox.ItemsSourceProperty, Enum.GetValues(typeof(BuilderDataTypes)).Cast<BuilderDataTypes>());
    b = new Binding("Value[1]");
    b.Converter = new ObjectToDataTypeConverter();
    b.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
    b.Mode = BindingMode.TwoWay;
    cboFactoryDT.SetBinding(ComboBox.SelectedIndexProperty, b);
    cboFactoryDT.SetValue(ComboBox.IsSynchronizedWithCurrentItemProperty, true);
    DataTemplate dtDT = new DataTemplate { VisualTree = cboFactoryDT };
    colDataType.CellTemplate = dtDT;

我的转换器类是:

public class ObjectToDataTypeConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        try
        {
            return int.Parse(value.ToString());
        }
        catch { return 0; }
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        try
        {
            return value;
        }
        catch { return 0; }
    }
}

现在,问题是当我更改其中一行中的选择时,所有行中的所有组合框也会更改为相同的选择。

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

看到像你这样的异常处理是我的宠物。你的代码具有吞噬致命异常的能力,这是异常处理的致命罪。您应阅读有关正确异常处理的这些文章:

http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx http://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET

更让我感到惊讶的是,你对Parse进行了错误的处理。如果你不想要Vexing Exceptions,那就是TryParse。不使用它的唯一原因是,如果您某种程度上低于Framework 2.0版,那么它就会被引入。我有针对该案例的重新安排代码,但似乎不太可能使用WPF。