Этот сводит меня с ума. Эта проблема появляется только тогда, когда сетка данных достаточно велика, чтобы требовать полосы прокрутки, поэтому я настоятельно рекомендую, чтобы виртуализация данных сыграла в этом свою роль. Как видно из xaml ниже, последний столбец, определенный для этой сетки данных, представляет собой кнопку, видимость которой связана с логическим свойством «ErrorsPresent» в DataGridCollectionView, который является источником данных для элемента управления.
По какой-то причине, неизвестной мне, когда в элемент управления загружается большой набор данных, появляются пустые строки с нулевыми значениями в каждом свойстве. Если я закомментирую последний столбец, сетка и ее данные отображаются правильно, но когда данные строки действительно обрабатываются (как в конвертере), я получаю эту неприятную ошибку в PresentationFramework. Извините, что включил все это, но я хочу продемонстрировать, что это весь код Windows:
'APreII.vshost.exe' (управляемый (v4.0.30319)): загружен 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ Accessibility \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ Accessibility.dll'
System.Transactions Критическое: 0: http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/UnhandledUnhandled exceptionAPreII.vshost.exeSystem.NullReferenceException, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089Объект объекта не задан для экземпляра объекта. в System.Windows.Data.BindingExpression.TransferValue (объект newValue, логическое значение isASubPropertyChange)
в System.Windows.Data.BindingExpression.Activate (Элемент объекта)
в System.Windows.Data.BindingExpression.AttachToContext (попытка AttachAttempt)
в System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext (Boolean lastChance)
в MS.Internal.Data.DataBindEngine.Task.Run (логическое значение lastChance)
в MS.Internal.Data.DataBindEngine.Run (объектный аргумент)
в MS.Internal.Data.DataBindEngine.OnLayoutUpdated (Отправитель объекта, EventArgs e)
в System.Windows.ContextLayoutManager.fireLayoutUpdateEvent ()
в System.Windows.ContextLayoutManager.UpdateLayout ()
в System.Windows.ContextLayoutManager.UpdateLayoutCallback (Object arg)
в System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks ()
в System.Windows.Media.MediaContext.RenderMessageHandlerCore (Object resizedCompositionTarget)
в System.Windows.Media.MediaContext.RenderMessageHandler (Object resizedCompositionTarget)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (Источник объекта, Метод делегата, Аргументы объекта, Int32 numArgs, Делегат catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, аргументы объекта, int32 numArgs, делегат catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl ()
в System.Threading.ExecutionContext.runTryCode (объект userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (код TryCode, код возврата CleanupCode, объект userData объекта)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)
в System.Windows.Threading.DispatcherOperation.Invoke ()
в System.Windows.Threading.Dispatcher.ProcessQueue ()
в System.Windows.Threading.Dispatcher.WndProcHook (обрабатывается IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & amp;
в MS.Win32.HwndWrapper.WndProc (обрабатываются IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & amp;
в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (Источник объекта, Метод делегата, Аргументы объекта, Int32 numArgs, Делегат catchHandler)в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, аргументы объекта, int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.InvokeImpl (приоритет DispatcherPriority, время ожидания TimeSpan, метод Delegate, объектные аргументы, int32 numArgs в)MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) в MS.Win32.UnsafeNativeMethods.DispatchMessage (MSG & msg) в системном хранилище файлов Windows..Application.RunInternal (окно окна) в System.Windows.Application.Run () в APreII.App.Main () в D: \ tfs \ Hermes \ dev \ Hermes5.0 \ src \ UIServices \ APreII \ obj \ Debug \App.g.cs: строка 0 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) в System.Runtime.Hosting.ApplicationActivator.CreateInstance (ActivationContext ActivationContext, String [] активацииCustomData) в Microsoft.VisualStucessProHosting.RunUsersAssemblyDebugInZone () в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThceptionStartference ()не установлен для экземпляра объекта.в System.Windows.Data.BindingExpression.TransferValue (Object newValue, Boolean isASubPropertyChange) в System.Windows.Data.BindingExpression.Activate (Item item) в System.Windows.Data.BindingExpression.AttachToContext (попытка AttachAttempt) в System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext (Boolean lastChance) в MS.Internal.Data.DataBindEngine.Task.Run (логический lastChance) в MS.Internal.Data.DataBindEngine.Run (объектный аргумент в MS).Internal.Data.DataBindEngine.OnLayoutUpdated (Отправитель объекта, EventArgs e) в System.Windows.ContextLayoutManager.fireLayoutUpdateEvent () в System.Windows.ContextLayoutManager.UpdateLayout () в System.Windows.ContextLallTaygategateate System.Windows.Conject.Way.Media.MediaContext.FireInvokeOnRenderCallbacks () в System.Windows.Media.MediaContext.RenderMessageHandlerCore (объект resizedCompositionTarget) в System.Windows.Media.MediaContext.RenderMessageHandler (Object resized) atSystem.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (источник объекта, метод делегата, аргументы объекта, Int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, объектные аргументы, int32 numArgs, делегат catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl () в System.Threading.ExecutionContext.runTryCode (объект userData) в System.RuntimeServices.iler.ExecuteCodeWithGuaranteedCleanup (код TryCode, backoutCode CleanupCode, объект userData) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логический ignoreSyncCtx) в объектном возврате) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.ProcessQueue() в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & обрабатываются) в MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 & lt;обрабатывается в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs)в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (источник объекта, метод делегата, аргументы объекта, Int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, объектные аргументы, int32 numArgs, делегат catchHandler в)System.Windows.Threading.Dispatcher.InvokeImpl (приоритет DispatcherPriority, тайм-аут TimeSpan, метод делегата, аргументы объекта, int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc (hwnd IntPtr, макс..UnsafeNativeMethods.DispatchMessage (MSG & msg) в System.Windows.Threading.Dispatcher.PushFrameImpl (фрейм DispatcherFrame) в System.Windows.Application.RunInternal (окно) в System.Windows.Application.Run () в APreII.App.() в D: \ tfs \ Hermes \ dev \ Hermes5.0 \ src \ UIServices \ APreII \ obj \ Debug \ App.g.cs: строка 0 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) вSystem.Runtime.Hosting.ApplicationActivator.CreateInstance (ActivationContext активацииContext, String [] активацииCustomData) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone () в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, контекстный обратный вызов, состояние объекта, логическое выражение логического преобразования класса.executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()
Xaml.Как вы можете видеть, я TRIED отключил виртуализацию, установив свойства CanContentScroll & ItemScrollingBehavior, что не имеет никакого эффекта.:
<XceedDG:DataGridControl Grid.Column="2" x:Name="EncounterDataGrid" ItemsSource="{Binding Path = EncounterDataGridCollectionView, UpdateSourceTrigger=PropertyChanged}"
Background="{x:Static Views:DataGridControlBackgroundBrushes.ElementalBlue}" CellErrorStyle="{StaticResource cell_error}"
FontSize="12" AutoCreateColumns="False" ItemScrollingBehavior="Immediate" ScrollViewer.CanContentScroll="False"
EditTriggers="None" NavigationBehavior="RowOnly" CellEditorDisplayConditions="None" >
<XceedDG:DataGridControl.View>
<Views:TableView ColumnStretchMode="All" ShowRowSelectorPane="False" ScrollViewer.CanContentScroll="False"
ColumnStretchMinWidth="100"/>
</XceedDG:DataGridControl.View>
<!--Group Header formatting-->
<XceedDG:DataGridControl.Resources>
<DataTemplate DataType="{x:Type XceedDG:Group}">
<TextBlock Foreground="DarkSlateBlue"
Padding="3,3,3,3" VerticalAlignment="Center"
FontSize="14" FontWeight="Black" MaxWidth="850" TextWrapping="Wrap"
Text="{Binding Path=., Converter={StaticResource GroupHeaderTextConverterType}}"/>
</DataTemplate>
</XceedDG:DataGridControl.Resources>
<!--Visible column definitions-->
<XceedDG:DataGridControl.Columns>
<XceedDG:Column MinWidth="50"
FieldName="AccountNumber"
Title="Account #"
IsMainColumn="True"
ShowInColumnChooser="False"
TextWrapping="Wrap"
ReadOnly="True"
Visible="True"/>
<XceedDG:Column MinWidth="50"
FieldName="DOB"
Title="Date of Birth"
IsMainColumn="False"
ShowInColumnChooser="False"
TextWrapping="Wrap"
ReadOnly="True"
Visible="True"/>
<XceedDG:Column MinWidth="4"
FieldName="Processed"
Title="Processed"
IsMainColumn="False"
ShowInColumnChooser="False"
TextWrapping="Wrap"
ReadOnly="True"
Visible="True"/>
<XceedDG:Column MinWidth="25"
FieldName="ErrorsPresent"
Title="Errors"
IsMainColumn="False"
ShowInColumnChooser="False"
TextWrapping="Wrap"
ReadOnly="True"
Visible="True" >
<XceedDG:Column.CellContentTemplate>
<DataTemplate>
<Button Command="{StaticResource ShowErrorDialogCommand}" CommandParameter="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type XceedDG:DataRow}}}" Foreground="Red"
Content="View Errors" FontSize="11"
Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type XceedDG:DataRow}}, Converter={StaticResource VisibilityConverterBooleanDataRow}, ConverterParameter=ErrorsPresent}"/>
</DataTemplate>
</XceedDG:Column.CellContentTemplate>
</XceedDG:Column>
</XceedDG:DataGridControl.Columns>
</XceedDG:DataGridControl>
И только для хихиканья, как я делаю DataGridCollectionView:
private void CreateDataGridCollectionView()
{
EncounterDataGridCollectionView = new DataGridCollectionView(Encounters);
EncounterDataGridCollectionView.Filter = new Predicate<object>(IsIncludedPt);
//Group by unit
PropertyGroupDescription groupDescription = new PropertyGroupDescription("UnitID");
EncounterDataGridCollectionView.GroupDescriptions.Add(groupDescription);
}
Спасибо за любую помощь.Я просто не знаю, как правильно отключить виртуализацию данных (если это проблема), как сохранить эти нулевые записи (которых нет в базовом наборе данных и DataGridCollectionView) от обработки конвертером видимости CellContentTemplate.