C# 注册Application.DispatcherUnhandleException时多重绑定中出现异常

C# 注册Application.DispatcherUnhandleException时多重绑定中出现异常,c#,wpf,data-binding,multibinding,C#,Wpf,Data Binding,Multibinding,当我更改组合框的选定值时,Application.DispatcherUnhandledException事件捕获以下异常 public class IngredientRowToTypeIDConverter : IMultiValueConverter { private SystemDataSet _dataSet; public object Convert( object[] values, Type targetType, object parameter, Sys

当我更改组合框的选定值时,Application.DispatcherUnhandledException事件捕获以下异常

public class IngredientRowToTypeIDConverter : IMultiValueConverter
{
    private SystemDataSet _dataSet;

    public object Convert( object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
      if( values.Length > 0 && values[ 0 ] is SystemDataSet.IngredientIngredientTypeRow )
      {
        var row = (SystemDataSet.IngredientIngredientTypeRow) values[ 0 ];
        _dataSet = _dataSet ?? (SystemDataSet) row.Table.DataSet;
        return row.IngredientTypeID;
      }
      else
        MessageBox.Show( "just for debugging" );

      return values;
    }

    public object[] ConvertBack( object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture )
    {
      if( value is int && _dataSet != null )
      {
        var ingredientTypeID = (int) value;
        var ingredient = _dataSet.IngredientIngredientType.Where( r => r.IngredientTypeID == ingredientTypeID ).OrderBy( r => r.IngredientRow.LongName ).First();
        var ingredientStock = ingredient.IngredientTypeRow.IsBuffer ? ingredient.IngredientRow.IngredientStockRowByDefaultBuffer : ingredient.IngredientRow.IngredientStockRowByDefaultNonBuffer;
        return new object[] { ingredient, ingredientStock };
      }
      else
        MessageBox.Show( "just for debugging" );

      return new object[] { value };
    }
}
但是,当全局异常处理程序事件未注册时,我不理解它

编辑:


请注意,组合框的一个绑定值也绑定到内容控件的数据触发器,以更改其数据模板。只有当组合框中的更改也应该更改模板时,才会发生异常。ContentTemplate更改成功。但是为什么会出现异常?

请显示来自
转换器的代码。刚刚添加了转换器和更多xaml。我看不出任何明显的问题,尽管在使用
值之前,您应该检查
null
输入参数。刚刚检查过。它从不为空(奇怪的是,如果Application.DispatcherUnandledException事件未注册,则不会发生异常。请您将问题向上投票,以便更多人注意到吗?更可能的情况是捕获了异常(但未处理)框架中的某个位置。如果在未处理
应用程序.dispatchernhandledexception
事件时查看输出窗口,是否仍注意到错误?
public class IngredientRowToTypeIDConverter : IMultiValueConverter
{
    private SystemDataSet _dataSet;

    public object Convert( object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
      if( values.Length > 0 && values[ 0 ] is SystemDataSet.IngredientIngredientTypeRow )
      {
        var row = (SystemDataSet.IngredientIngredientTypeRow) values[ 0 ];
        _dataSet = _dataSet ?? (SystemDataSet) row.Table.DataSet;
        return row.IngredientTypeID;
      }
      else
        MessageBox.Show( "just for debugging" );

      return values;
    }

    public object[] ConvertBack( object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture )
    {
      if( value is int && _dataSet != null )
      {
        var ingredientTypeID = (int) value;
        var ingredient = _dataSet.IngredientIngredientType.Where( r => r.IngredientTypeID == ingredientTypeID ).OrderBy( r => r.IngredientRow.LongName ).First();
        var ingredientStock = ingredient.IngredientTypeRow.IsBuffer ? ingredient.IngredientRow.IngredientStockRowByDefaultBuffer : ingredient.IngredientRow.IngredientStockRowByDefaultNonBuffer;
        return new object[] { ingredient, ingredientStock };
      }
      else
        MessageBox.Show( "just for debugging" );

      return new object[] { value };
    }
}
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at System.Windows.Data.MultiBindingExpression.UpdateSource(Object convertedValue)
   at System.Windows.Data.BindingExpressionBase.UpdateValue()
   at System.Windows.Data.BindingExpressionBase.Dirty()
   at System.Windows.Data.BindingExpressionBase.SetValue(DependencyObject d, DependencyProperty dp, Object value)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetCurrentValueInternal(DependencyProperty dp, Object value)
   at System.Windows.Controls.Primitives.Selector.UpdatePublicSelectionProperties()
   at System.Windows.Controls.Primitives.Selector.SelectionChanger.End()
   at System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(ItemInfo info, Boolean assumeInItemsCollection)
   at System.Windows.Controls.ComboBoxItem.OnMouseLeftButtonUp(MouseButtonEventArgs e)