private void OnNestedPropertyChanged(object sender, ModelPropertyChangedEventArgs e) { INotifyModelPropertyChanged s = sender as INotifyModelPropertyChanged; // if not recognized return if (s == null) { return; } // add root type name to nested property changed event // but only if we are not in cycle if (e.AddInChain(_indexOfLastChangedItem.ToString(), new ModelPropertyChangedEventArgs.PropertyChangedChainEntry() { PropertyName = _indexOfLastChangedItem.ToString(), Position = _indexOfLastChangedItem, Container = this, Collection = this } )) { // handle changed SetChaged(); // notify _wes_ModelPropertyChanged?.Raise(this, e); } }
protected override void InsertItem(int index, T item) { SetChaged(); (item as INotifyModelPropertyChanged).ModelPropertyChanged += OnNestedPropertyChanged; base.InsertItem(index, item); // notify whole object change ModelPropertyChangedEventArgs earg = new ModelPropertyChangedEventArgs( "*", new ModelPropertyChangedEventArgs.PropertyChangedChainEntry() { PropertyName = "*", Container = this[index], Collection = this } ); earg.AddInChain( index.ToString(), new ModelPropertyChangedEventArgs.PropertyChangedChainEntry() { PropertyName = index.ToString(), Container = this, Position = index, // in case of delete it will be out of bounds Collection = this, ListChangedType = ListChangedType.ItemAdded } ); _wes_ModelPropertyChanged?.Raise( this, earg ); }
private void OnNestedPropertyChanged(object sender, ModelPropertyChangedEventArgs e) { INotifyModelPropertyChanged s = sender as INotifyModelPropertyChanged; // if not recognized return if (s == null) { return; } // add root type name to nested property changed event if (e.AddInChain(s.GetFieldName(), new ModelPropertyChangedEventArgs.PropertyChangedChainEntry() { PropertyName = s.GetFieldName(), Container = this } )) { // handle changed SetChaged(); _wes_ModelPropertyChanged?.Raise(this, e); } }