c# wpf debugging excel add-in

c# - Cómo depurar el enlace en WPF



debugging excel (2)

Tengo un VS2008, C # WPF, complemento de Excel; En algún caso, My addin lanza una excepción como

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

pero no pude localizar de dónde viene la excepción. Sé que es b / c enlace de datos. pero incapaz de averiguar dónde. Cada vez que intervengo, VS realiza un seguimiento de un método que se ejecuta sin error, luego, después de eso, se lanza la excepción y no se da ninguna pista de qué línea de código.

He estado luchando por esto durante días y no he podido avanzar un poco. Por favor ayuda. Gracias

Editar, es demasiado largo para caber en el comentario. Así que acabo de poner el archivo xaml aquí. Archivo @xmal que lanza la excepción. Es DataGridComboBoxColumn que lanza la excepción

<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>

Editar : aquí está la traza de pila

Nombre: NullReferenceException Mensaje: Referencia de objeto no establecida en una instancia de un objeto. Destino: Void RestoreAttachedItemValue (System.Windows. at Microsoft.Windows.Controls.DataGridRow.PrepareRow (Object item, DataGrid owningDataGrid) en Microsoft.Windows.Controls.DataGrid.PrepareContainerForItemOvertide. .PrepareItemContainer (contenedor, elemento de objeto DependencyObject) en System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.PrepareItemContainer (DependencyObject contenedor) en System.Windows.Controls.VirtualizingStackPanel.InsertContainer (Int32 childIndex, contenedor UIElement, Boolean isRecycled) en System.Windows.Controls.VirtualizingStackPanel .AddContainerFromGenerator (Int32 childIndex, UIElement child, Boolean newlyRealized) en System.Windows.Controls.VirtualizingStackPanel.BringIndexIntoView (índice de Int32) en Microsoft.Windows.Controls.DataGrid.ScrollRowIntoView (elemento de objeto)
en Microsoft.Windows.Controls.DataGrid.OnScrollIntoView (objeto arg)
en System.Windows.Threading.ExceptionWrapper.InternalRealCall (devolución de llamada delegada, argumentos de objetos, números de Int32) en MS.Internal.Threading.ExceptionFilterHelper.TryCatchWen (Fuente del objeto, Método de delegado, Argumentos de objetos, Num32 Arrancadores) .Threading.Dispatcher.WrappedInvoke (Delegado de devolución de llamada, Objeto args, Int32 numArgs, Delegate catchHandler) en System.Windows.Threading.DispatcherOperation.InvokeImpl (Estado). ExecutionContext.runTryCode (Object userData) en System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (Código de TryCode, Estado de juego de la columna de recreo, Objeto de la carga, Objeto, Objeto, Objeto, Objeto, Objeto, Objeto). ExecutionContext.Run (ExecutionContext runContext, ContextCallback callback, Estado del objeto, Boolean ignoreSyncCtx) en System.T hreading.ExecutionContext.Run (Ejecución de ejecución de contextoContext, Devolución de llamada de ContextCallback, Estado del objeto) en System.Windows.Threading.DispatcherOperation.Invoke () en System.Windows.pañe IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean y manejado) en MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msp, por ejemplo, por ejemplo). ) en System.Windows.Threading.ExceptionWrapper.InternalRealCall (Devolución de llamada delegada, Argumentos de objeto, Int32 numArgs) en MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (Origen de objeto, Método delegado, Argumentos de objeto, Número de archivo de Int32). Windows.Threading.Dispatcher.WrappedInvoke (Delegación de devolución de llamada, Objeto args, Int32 numArgs, Delegate catchHandler) en System.Windows.Threading.Dispatcher.InvokeImpl (Prioridad de Dispatcher, TimeSpan time, Delegate method, Objec t args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam) en este sitio web de Microsoft.Wins32NUsafeNativeMetage (MSG). DispatcherFrame frame) en System.Windows.Threading.Dispatcher.PushFrame (DispatcherFrame frame)
en System.Windows.Window.ShowHelper (Object booleanBox) en System.Windows.Window.Show () en System.Windows.Window.ShowDialog ()


No estoy seguro de la causa de su problema, pero aquí hay algunos enlaces sobre cómo puede depurar los enlaces WPF:

¿Cómo puedo depurar los enlaces de WPF? http://www.zagstudio.com/blog/486 ( WayBackLink )

Depuración de enlaces de datos en una aplicación WPF o Silverlight http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx ( WayBackLink )

Fragmento de WPF - Detección de errores de enlace
http://www.switchonthecode.com/tutorials/wpf-snippet-detecting-binding-errors ( WayBackLink )

Problemas de enlace de datos de depuración en WPF
http://www.wpftutorial.net/DebugDataBinding.html


Wpf detecta las excepciones de enlace para que normalmente no desencadenen la interrupción del depurador. Puede hacer que se rompan siempre usando el comando de menú Debug / Exceptions en VS, haga clic en Buscar, escriba la excepción que está viendo (por ejemplo, System.InvalidOperationException ). Haga clic en Aceptar, y el cuadro de diálogo debería desplazarse hacia abajo hasta esa excepción. Marque la casilla de verificación en la columna "Lanzar" y los VS deben interrumpirse en cualquier línea de código que esté lanzando la excepción original cuando esté depurando.

Esto capturará todas las excepciones de ese tipo, incluso las que está capturando explícitamente en un bloque Try Catch, así que recuerde desmarcar esa casilla cuando haya terminado de depurar o terminará preguntándose por qué VS está rompiendo las excepciones que están siendo detectadas.