我有一个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; }
}
}
现在,问题是当我更改其中一行中的选择时,所有行中的所有组合框也会更改为相同的选择。
可能是什么问题?
答案 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。