如何在WPF中debugging绑定

我有一个VS2008,C#WPF,Excel AddIn; 在某些情况下,我的插件引发exception

A first chance exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll 

但我找不到exception来自哪里。 我知道这是B / C数据绑定。 但无法find在哪里。 每次我介入,VS跟踪执行无错误的方法,然后,exception抛出,但没有线索的代码行。

我一直在苦苦挣扎,无法取得进展。 请帮忙。 谢谢

编辑,这是太长,以适应评论。 所以我只是把xaml文件放在这里。 抛出exception的@xmal文件。 DataGridComboBoxColumn引发exception

 <UserControl x:Class="View.BasketView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit" > <UserControl.Resources> <sharedC:FunctionToHiddenVisibility x:Key="enumSRToVis"/> <sharedC:FunctionToHiddenVisibility x:Key="enumCSToVis"/> <Style x:Key="DataGridRowStyle" TargetType="{x:Type dg:DataGridRow}"> <Style.Triggers> <Trigger Property="AlternationIndex" Value="1" > <Setter Property="Background" Value="Beige" /> </Trigger> </Style.Triggers> <Setter Property="AllowDrop" Value="True" /> <Setter Property="Margin" Value="0 2 0 2" /> </Style> <Style x:Key="DataGridStyle" TargetType="{x:Type dg:DataGrid}"> <Setter Property="AlternationCount" Value="2" /> <Setter Property="RowStyle" Value="{StaticResource DataGridRowStyle}" /> </Style> <Style TargetType="{x:Type MenuItem}"> <Style.Triggers> <Trigger Property="MenuItem.IsHighlighted" Value="True" > <Setter Property="BorderBrush" > <Setter.Value> <SolidColorBrush Color="Gray"></SolidColorBrush> </Setter.Value> </Setter> <Setter Property="BorderThickness" Value="1"/> </Trigger> </Style.Triggers> </Style> </UserControl.Resources> <GroupBox> <GroupBox.Header> <TextBlock FontSize="14" FontFamily="Verdana" Text="{Binding Header,Mode=OneWay}"></TextBlock> </GroupBox.Header> <Grid> <Grid.RowDefinitions> <RowDefinition Height="33"></RowDefinition> <RowDefinition Height="*" ></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Border Margin="2 2 2 0"> <Grid> <Menu Background="Transparent"> <Menu.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> </Menu.Resources> <MenuItem IsEnabled="{Binding IsItemSelected}" Click="EditClick" ToolTip="Edit Relation(s)" Background="Transparent"> <MenuItem.Header> <Image Width="16" Height="16" Source="{Binding EditImageFilePath}"/> </MenuItem.Header> </MenuItem> <MenuItem IsEnabled="{Binding IsItemSelected}" Click="DeleteClick" ToolTip="Delete Relation(s)" Background="Transparent"> <MenuItem.Header> <Image Width="16" Height="16" Source="{Binding DeleteImageFilePath}"/> </MenuItem.Header> </MenuItem> </Menu> </Grid> </Border> <dg:DataGrid Grid.Row="1" x:Name="basketDG" Margin="5 0 5 0" Background="White" AutoGenerateColumns="False" Style="{StaticResource DataGridStyle}" SelectionMode="Extended" GridLinesVisibility="None" HeadersVisibility="Column" RowDetailsVisibilityMode="VisibleWhenSelected" ItemsSource="{Binding BasketItems, Mode=OneWay}" CanUserAddRows="False" CanUserDeleteRows="False" SelectionUnit="FullRow" SelectedItem="{Binding SelectedRelComplete}" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" SelectionChanged="BasketDgSelectionChanged" Drop="DataGridDrop" DragEnter="DataGridDragEnter" AllowDrop="True" > <!-- Column definition --> <dg:DataGrid.Columns> <dg:DataGridTextColumn IsReadOnly="True" Width="100" Header="Symbol" Binding="{Binding Name}" > <dg:DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </dg:DataGridTextColumn.ElementStyle> </dg:DataGridTextColumn> <dg:DataGridTextColumn IsReadOnly="True" Width="*" Header="Symbol Description" Binding="{Binding Desc}" > <dg:DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextTrimming" Value="WordEllipsis" /> </Style> </dg:DataGridTextColumn.ElementStyle> </dg:DataGridTextColumn> <dg:DataGridComboBoxColumn Width="200" Header="Column" SelectedValueBinding="{Binding Path=RelParams.ColumnName, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="cName" SelectedValuePath="cName"> <dg:DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding RelInfo.Columns}" /> </Style> </dg:DataGridComboBoxColumn.ElementStyle> <dg:DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding RelInfo.Columns}" /> </Style> </dg:DataGridComboBoxColumn.EditingElementStyle> </dg:DataGridComboBoxColumn> </dg:DataGrid.Columns> </dg:DataGrid> <Grid Grid.Row="2" Margin="0 5 0 0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" ></ColumnDefinition> <ColumnDefinition Width="Auto" ></ColumnDefinition> <ColumnDefinition Width="5" ></ColumnDefinition> <ColumnDefinition Width="Auto" ></ColumnDefinition> </Grid.ColumnDefinitions> <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Column="0"> <Button Name="BtnSR" Visibility="{Binding SelectedFunction, Converter={StaticResource enumSRToVis}}" IsEnabled="{Binding ItemsExist}" Margin="2" Click="ShowBasketSettings">Basket Settings</Button> </StackPanel> <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Column="0"> <Button Name="BtnCS" Visibility="{Binding SelectedFunction, Converter={StaticResource enumCSToVis}}" IsEnabled="{Binding OnlyOneFutureItemExist}" Margin="2" Click="ShowCreateCurve">Curve Settings</Button> </StackPanel> <StackPanel Grid.Column="1"> <Button Width="50" Name ="BtnClear" ToolTip="Clear Basket" Margin="2" IsEnabled="{Binding ItemsExist}" Click="BtnClear_Click">Clear</Button> </StackPanel> <StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Grid.Column="3"> <Button Visibility ="{Binding ElementName=BtnSR, Path=Visibility}" ToolTip="Send Series Data to Table" Name="SendToTable" Margin="2" Command="{Binding SendToTableCommand}" CommandParameter="{Binding ElementName=SendToTable}">Send to Table</Button> </StackPanel> <StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Grid.Column="3"> <Button Visibility="{Binding ElementName=BtnCS, Path=Visibility}" Name="CreateCurveSurface" Margin="2" ToolTip="Send Curve Surface to Table" IsEnabled="{Binding OnlyOneFutureItemExist}" Click="CreateCurveSurfaceClick" >Send to Table</Button> </StackPanel> </Grid> </Grid> </GroupBox> </UserControl> 

编辑 :这里是堆栈跟踪

名称:NullReferenceException消息:对象引用未设置为对象的实例。 目标:无效RestoreAttachedItemValue(System.Windows.DependencyObject,System.Windows.DependencyProperty)堆栈:在Microsoft.Windows.Controls.DataGridRow.RestoreAttachedItemValue(DependencyObject objectWithProperty,DependencyProperty属性)在Microsoft.Windows.Controls.DataGridRow.SyncProperties(布尔forcePrepareCells)在Microsoft.Windows.Controls.DataGridRow.PrepareRow(Object item,DataGrid owningDataGrid)在Microsoft.Windows.Controls.DataGrid.PrepareContainerForItemOverride(DependencyObject元素,对象项目)在System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost在System.Windows.Controls.VirtualizingStackPanel.InsertContainer(Int32 childIndex,UIElement容器,System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.PrepareItemContainer(DependencyObject容器)中的.PrepareItemContainer(DependencyObject容器,对象项)布尔isRecycled)在System.Windows.Controls.VirtualizingStackPanel .AddContainerFromGenerator(Int32 childIndex,UIElement child,Boolean newlyRealized)在System.Windows.Controls.VirtualizingStackPanel.BringIndexIntoView(Int32索引)在Microsoft.Windows.Controls.DataGrid.ScrollRowIntoView(对象项目)
在Microsoft.Windows.Controls.DataGrid.OnScrollIntoView(Object arg)
在System.Windows的MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)上的System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegatecallback,Object args,Int32 numArgs) .Threading.Dispatcher.WrappedInvoke(委托callback,对象args,Int32 numArgs,委托catchHandler)在System.Windows.Threading.DispatcherOperation.InvokeImpl()在System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(对象状态)在System.Threading。在System.Threading的System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallbackcallback,对象状态)System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode代码,CleanupCode backoutCode,对象userData)上的ExecutionContext.runTryCode(对象userData) ExecutionContext.Run(ExecutionContext executionContext,ContextCallbackcallback,对象状态,布尔ignoreSyncCtx)System.T 在System.Windows.Threading.DispatcherOperation.Invoke()System.Windows.Threading.Dispatcher.ProcessQueue()在System.Windows.Threading.Dispatcher.WndProcHook()的hreading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallbackcallback,对象状态) IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,布尔&处理)在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,布尔&处理)在MS.Win32.HwndSubclass.DispatcherCallbackOperation(对象o )在System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表callback,对象args,Int32 numArgs)在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(对象源,委托方法,对象args,Int32 numArgs,代理catchHandler)。在System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority优先级,TimeSpan超时,Delegate方法,Objec)上的Windows.Threading.Dispatcher.WrappedInvoke(委托callback,Object args,Int32 numArgs,Delegate catchHandler) (MSG&msg)at System.Windows.Threading.Dispatcher.PushFrameImpl(Int args,Int32 numArgs)at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam)at MS.Win32.UnsafeNativeMethods.DispatchMessage DispatcherFrame框架)在System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame框架)
System.Windows.Window.ShowHelper(对象booleanBox)在System.Windows.Window.Show()在System.Windows.Window.ShowDialog()

我不确定你的问题的原因,但这里有一些关于如何debuggingWPF绑定的链接 –

我怎样才能debuggingWPF绑定? http://www.zagstudio.com/blog/486(WayBackLink

debuggingWPF或Silverlight应用程序中的数据绑定http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx ( WayBackLink )

WPF代码片段 – 检测绑定错误
http://www.switchonthecode.com/tutorials/wpf-snippet-detecting-binding-errors(WayBackLink

debuggingWPF中的数据绑定问题
http://www.wpftutorial.net/DebugDataBinding.html

Wpf捕获绑定exception,所以它们通常不会触发debugging器中断。 你可以通过在VS中使用Debug \ Exceptions菜单命令使它们总是中断,单击Find,input你所看到的exception(例如System.InvalidOperationException )。 点击确定,对话框应该向下滚动到那个例外。 勾选“Thrown”列中的checkbox,然后在debugging时VS应该在任何代码行中抛出原始exception。

这将捕获该types的所有exception – 即使是在Try Catch块中显式捕获的exception,请记住在完成debugging时取消选中该框,否则最终会想知道为什么VS打破被捕获的exception。