Reputation: 908
I have a data grid with an array of objects in it, Everything works perfectly fine until I add an error (IErrorInfo) to the Errors Collection
the following error happens at the Property Changged
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); <//---- here
}
}
and the DataGrid.UpdateLayout
TimesheetArray = CreateMatrix(SelectedTimesheet.TimesheetDetails);
RaisePropertyChanged("TimesheetArray");
this.CrossTabDG.UpdateLayout();//----- HERE
this.CrossTabDG.ItemsSource = this.TimesheetArray;
Error Code
System.ArgumentNullException occurred
Message=Key cannot be null.
Parameter name: key
Source=System
ParamName=key
StackTrace:
at System.Collections.Specialized.HybridDictionary.get_Item(Object key)
at System.ComponentModel.PropertyChangedEventManager.PrivateAddListener(INotifyPropertyChanged source, IWeakEventListener listener, String propertyName)
at System.ComponentModel.PropertyChangedEventManager.AddListener(INotifyPropertyChanged source, IWeakEventListener listener, String propertyName)
at MS.Internal.Data.PropertyPathWorker.ReplaceItem(Int32 k, Object newO, Object parent)
at MS.Internal.Data.PropertyPathWorker.UpdateSourceValueState(Int32 k, ICollectionView collectionView, Object newValue, Boolean isASubPropertyChange)
at MS.Internal.Data.ClrBindingWorker.AttachDataItem()
at System.Windows.Data.BindingExpression.Activate(Object item)
at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
at System.Windows.Data.BindingExpression.AttachOverride(DependencyObject target, DependencyProperty dp)
at System.Windows.Data.BindingExpressionBase.Attach(DependencyObject target, DependencyProperty dp)
at System.Windows.Data.BindingExpressionBase.OnAttach(DependencyObject d, DependencyProperty dp)
at System.Windows.StyleHelper.GetInstanceValue(UncommonField`1 dataField, DependencyObject container, FrameworkElement feChild, FrameworkContentElement fceChild, Int32 childIndex, DependencyProperty dp, Int32 i, EffectiveValueEntry& entry)
at System.Windows.StyleHelper.GetChildValueHelper(UncommonField`1 dataField, ItemStructList`1& valueLookupList, DependencyProperty dp, DependencyObject container, FrameworkObject child, Int32 childIndex, Boolean styleLookup, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot)
at System.Windows.StyleHelper.GetChildValue(UncommonField`1 dataField, DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList`1& childRecordFromChildIndex, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot)
at System.Windows.StyleHelper.GetValueFromStyleOrTemplate(FrameworkObject fo, DependencyProperty dp, EffectiveValueEntry& entry)
at System.Windows.FrameworkElement.GetRawValue(DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry& entry)
at System.Windows.FrameworkElement.EvaluateBaseValueCore(DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry& newEntry)
at System.Windows.DependencyObject.EvaluateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry newEntry, OperationType operationType)
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.InvalidateProperty(DependencyProperty dp)
at System.Windows.StyleHelper.InvalidateDependents(Style ownerStyle, FrameworkTemplate frameworkTemplate, DependencyObject container, DependencyProperty dp, FrugalStructList`1& dependents, Boolean invalidateOnlyContainer)
at System.Windows.StyleHelper.OnTriggerSourcePropertyInvalidated(Style ownerStyle, FrameworkTemplate frameworkTemplate, DependencyObject container, DependencyProperty dp, DependencyPropertyChangedEventArgs changedArgs, Boolean invalidateOnlyContainer, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalMap& propertyTriggersWithActions, Int32 sourceChildIndex)
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(DependencyPropertyKey key, Object value)
at System.Windows.Controls.Validation.AddValidationError(ValidationError validationError, DependencyObject targetElement, Boolean shouldRaiseEvent)
at System.Windows.Data.BindingGroup.AddValidationError(ValidationError validationError)
at System.Windows.Data.BindingGroup.ValidateOnDataTransfer()
at System.Windows.Data.BindingGroup.OnLayoutUpdated(Object sender, EventArgs e)
at System.Windows.ContextLayoutManager.fireLayoutUpdateEvent()
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
at TimesheetEntry.Views.TimesheetEntryViewModel.UpdateTimesheetGrid() in C:\Data Drive\Projects\DotNET\Laing_ORourke\source\TimesheetEntry\TimesheetEntry\Views\TimesheetEntry\TimesheetEntryViewModel.cs:line 405
InnerException:
Can anyone please tell me how to find which Key is missing
1) The PropertyName is not null 2) the UpdateLayout() requires no parameters
No ValidationErrors - no Issue - BUT I DO NEED IT,
Upvotes: 2
Views: 1984
Reputation: 13972
This usually happens when you qualify an owner type for a Binding and the type you're specifying is not the type it's bound in runtime.
For instance:
<Setter Property="Canvas.Top" Value="{Binding (viewModels:FaceWithCandidates.Face).FaceRectangle.Top}" />
If you are qualifying the binding saying that you're dealing with a FaceWithCandidates and in runtime, the data context contains any other type, it will throw this kind of exception.
Check your Bindings when you qualify your properties! :)
Upvotes: 8
Reputation: 17973
I figure you already solved this or moved on, but I'll post this for future reference.
I got the same error when using an ItemsControl with alternation count set which I displayed in a TextBlock. It only occured on one particular machine, but when I removed the line below from the ItemContainerStyle the exception disappeared.
<TextBlock Text="{Binding (ItemsControl.AlternationIndex),
RelativeSource={RelativeSource Mode=TemplatedParent},
StringFormat='{}Item {0}'}"/>
So it seems this error occurs due to some faulty XAML code. You could try to remove the controltemplate style and see if that works, and if it does, add elements until the error occurs again, in order to find out which element is incorrect. It seems attached properties is the culprit though, so I would look for those first.
Upvotes: 1