Tengo un DataGrid en una aplicación WPF que se une a un ObservableCollection de objetos, y todo funciona bien. Ahora, si modifico una celda en la cuadrícula de datos durante el tiempo de ejecución y elimino el contenido, dejo la celda vacía. El valor correspondiente de observableCollection no se modificará, será el valor anterior. Pero cuando se cierre la ventana que contiene la cuadrícula de datos y reiniciar la ventana, se lanza una XamlParseException, dice: "set 'System.Windows.Controls.ItemsControl.ItemsSource' Propiedad inició una excepción"WPF DataGrid ItemsSource Binding Número
StackTrace:
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at VO3.Start.InitializeComponent() in c:\VO\Trunk\VO3\Start.xaml:line 1
at VO3.Start..ctor() in C:\VO\Trunk\VO3\Start.xaml.cs:line 103
InnerException: System.InvalidOperationException
Message='DeferRefresh' is not allowed during an AddNew or EditItem transaction.
Source=PresentationFramework
StackTrace:
at System.Windows.Data.CollectionView.DeferRefresh()
at System.Windows.Controls.ItemCollection.SetCollectionView(CollectionView view)
at System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value)
at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
InnerException:
No lo hará lanzar la excepción siempre que cuando cerré la ventana, ninguna celda en la cuadrícula de datos esté vacía. También verifiqué la colección antes de que la ventana haga InitializeComponent Line y se ve perfectamente bien, todos los objetos tienen el valor correcto, ni vacíos ni nulos. No puedo entender por qué está lanzando esta excepción. ¿algunas ideas? Gracias de antemano.
XAML:
<DataGrid HeadersVisibility="All" RowHeight="19" AutoGenerateColumns="False" Grid.Row="1" CanUserResizeColumns="False"
CanUserAddRows="False" CanUserDeleteRows="False" Block.TextAlignment="Right" Grid.RowSpan="2" CanUserReorderColumns="False"
ItemsSource="{Binding Collection}" Width="132" HorizontalAlignment="Right" Margin="10,0,10,0" CanUserSortColumns="False"
IsEnabled="{Binding ElementName=CheckBox, Path=SelectedIndex, Converter={StaticResource startEnabledConverter}}">
¿Las propiedades de los elementos de la colección son nulables? Cuándo se actualiza su propiedad (por ejemplo, PropertyChanged, LoseFocus, etc.). – CodeWarrior
las propiedades del objeto en la colección no pueden contener nulos, se actualizan en propertychanged. pero a partir de la experiencia pasada, cuando el campo se deja en blanco no significa que el objeto correspondiente en la colección sea nulo. y he verificado después de que el valor se haya dejado en blanco que el objeto en la colección sigue siendo el valor anterior.Antes de que la ventana se abra de nuevo, verifiqué los valores nuevamente y no hay propiedades vacías. Por alguna razón WPF lanza una excepción cuando llega a la propiedad set de ItemsSource Dependency Property del DataGrid –
. Sugiero que busque cualquier otra parte de su UI que se una a la misma ObservableCollection y elimine todo el enlace a esa colección para probar usted encima del problema otra vez en el aislamiento. Si tienes suerte, esto es simplemente un problema con la colección CollectionView que utilizan otros controles. –