private void notifyMultilevelPropertyChangedHandler(string fullPropertyName, MultilevelPropertyChangeObserver observer) { object[] tagData = observer.Tag as object[]; if ((tagData == null) || (tagData.Length != 2)) { return; } DataGridViewCell cell = tagData[0] as DataGridViewCell; CustomDataGridViewColumnDescriptor <T> columnDescriptor = tagData[1] as CustomDataGridViewColumnDescriptor <T>; if (cell == null) { return; } columnDescriptor.UpdaterMethod?.Invoke(item, cell); }
private void subscribeToMultilevelItemEvents() { INotifyPropertyChanged itemCastedINotifyPropertyChanged = item as INotifyPropertyChanged; if (itemCastedINotifyPropertyChanged == null) { return; } for (int i = 0; i < cells.Count; i++) { DataGridViewCell cell = cells[i]; CustomDataGridViewColumnDescriptor <T> columnDescriptor = table.ColumnDescriptors[i]; foreach (string[] eventNames in columnDescriptor.MultilevelChangeEvents) { object[] tagData = new object[] { cell, columnDescriptor }; MultilevelPropertyChangeObserver multilevelObserver = new MultilevelPropertyChangeObserver(itemCastedINotifyPropertyChanged, eventNames, tagData); multilevelObserver.MultilevelPropertyChanged += notifyMultilevelPropertyChangedHandler; } } }