C# 创建新选项卡后切换选项卡时引发System.ArgumentException

C# 创建新选项卡后切换选项卡时引发System.ArgumentException,c#,.net,wpf,telerik,caliburn.micro,C#,.net,Wpf,Telerik,Caliburn.micro,我们发现,在通过Windows Update安装.Net 4.5.1之后,引入了以下错误。我们目前的修复方案不会持续很长时间,它是卸载更新并将每个人的机器保持在.NET4.0 我们有一个WPF屏幕,用于运行和查看报告。每个报表都是一个“ReportViewModel”。视图模型的集合在一个“ReportManagerViewModel”中进行管理,该“ReportManagerViewModel”管理使用Caliburn.Micro.Conductor的选项卡集合 如果我们打开一个现有的选项卡,

我们发现,在通过Windows Update安装.Net 4.5.1之后,引入了以下错误。我们目前的修复方案不会持续很长时间,它是卸载更新并将每个人的机器保持在.NET4.0

我们有一个WPF屏幕,用于运行和查看报告。每个报表都是一个“ReportViewModel”。视图模型的集合在一个“ReportManagerViewModel”中进行管理,该“ReportManagerViewModel”管理使用Caliburn.Micro.Conductor的选项卡集合

如果我们打开一个现有的选项卡,该选项卡将完全加载。然后,我们启动一个新选项卡,运行一个报告,将焦点转移到新选项卡并填充其数据。此选项卡现在是选项卡集合的一部分。如果尝试切换回已打开的选项卡之一,则会发生以下情况:

第一次单击(第一次单击预先存在的选项卡)不起任何作用。第二次单击导致应用程序崩溃,并出现以下错误:

System.ArgumentException:已添加具有相同密钥的项

有趣的是,当切换活动选项卡时,将调用Conductor.ActivateItem()。当抛出错误时,甚至不会调用此方法

Telerik WPF使用Visual Studio 2010 Caliburn.Micro v.1.5.2控制2013年第三季度的热修复程序1424

编辑:我们现在知道Telerik不是原因,因为我们从RadTabItem切换到TabItem,并且我们没有使用Caliburn.Micro.Conductor

例外情况: 已添加具有相同密钥的项。 资料来源:mscorlib 堆栈跟踪: 在System.ThrowHelper.ThrowArgumentException(异常资源) 在System.Collections.Generic.Dictionary
2.Insert(TKey键、TValue值、布尔加法)
位于System.Collections.Generic.Dictionary
2..ctor(IDictionary
2 Dictionary,IEqualityComparer
1比较器) 位于System.Windows.Controls.Primitives.Selector.InternalSelectedItemsStorage..ctor(InternalSelectedItemsStorage集合,IEqualityComparer`1 equalityComparer) 在System.Windows.Controls.Primitives.Selector.SelectionChanger.ApplyCanSelectMultiple()中 在System.Windows.Controls.Primitives.Selector.SelectionChanger.End()中 位于System.Windows.Controls.Primitives.Selector.SetSelectedHelper(对象项,FrameworkElement UI,布尔选定) 在System.Windows.Controls.Primitives.Selector.NotifyIsSelectedChanged(FrameworkElement容器,布尔值选定,RoutedEventArgs e) 在System.Windows.Controls.Primitives.Selector.OnSelected(对象发送器,RoutedEventArgs e) 位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets) 在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔值重新调高) 位于System.Windows.UIElement.RaiseEventImpl(DependencyObject发送方,RoutedEventTargets参数) 在System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)处 在System.Windows.Controls.TabItem.OnSelected中(RoutedEventArgs e) 在System.Windows.Controls.TabItem.OnIsSelectedChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) 位于System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 位于System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 位于System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs参数) 在System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex EntryIndex,DependencyProperty dp,PropertyMetadata,EffectiveValueEntry oldEntry,EffectiveValueEntry&newEntry,布尔强制WithDeferredReference,布尔强制WithCurrentValue,OperationType OperationType) 位于System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp、对象值、PropertyMetadata元数据、布尔强制WithDeferredReference、布尔强制WithCurrentValue、OperationType OperationType、布尔isInternal) 位于System.Windows.DependencyObject.SetCurrentValueInternal(DependencyProperty dp,对象值) 在System.Windows.Controls.TabItem.OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)中 在System.Windows.UIElement.OnPreviewGotKeyboardFocusThunk(对象发送器,KeyboardFocusChangedEventArgs e) 在System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeeEventHandler(委托genericHandler,对象genericTarget) 位于System.Windows.RouteDevenTargets.InvokeHandler(委托处理程序,对象目标) 位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets) 在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔值重新调高) 位于System.Windows.UIElement.RaiseEventImpl(DependencyObject发送方,RoutedEventTargets参数) 在System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs参数)处 位于System.Windows.UIElement.RaiseEvent(RoutedEventArgs,布尔可信) 在System.Windows.Input.InputManager.ProcessStaginArea()中 位于System.Windows.Input.InputManager.ProcessInput(InputEventArgs输入) 位于System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus、IKeyboardInputProvider keyboardInputProvider、Boolean askOld、Boolean Asknowed、Boolean forceToNullIfFailed) 在System.Windows.Input.KeyboardDevice.Focus(DependencyObject焦点、布尔askOld、布尔Asknow、布尔forceToNullIfFailed) 位于System.Windows.Input.KeyboardDevice.Focus(IIInputElement) 在System.Windows.UIElement.Focus()处 在System.Windows.Controls.TabItem.SetFocus()中 在System.Windows.Controls.TabItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)中 在System.Windows.UIElement.OnMouseLeftButtonDownThunk(对象发送器,MouseButtonEventArgs e) 在System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(委托genericHandler,对象genericTarget) 位于System.Windows.RouteDevenTargets.InvokeHandler(委托处理程序,对象目标)
        public override bool Equals(object obj)
        {
            if (obj is ExtendedButton2Content)
            {
                ExtendedButton2Content temp = (ExtendedButton2Content)obj;
                return temp.Index == this.Index;
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            return Index;
        }