Index: Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs =================================================================== diff -u -r1ab3d180b9a6ea55959a33564b11bea9a10db3c8 -rc22766d7a76d782f642559c71d213b4d25aa5e8e --- Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs (.../PropertyGridView.cs) (revision 1ab3d180b9a6ea55959a33564b11bea9a10db3c8) +++ Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs (.../PropertyGridView.cs) (revision c22766d7a76d782f642559c71d213b4d25aa5e8e) @@ -25,6 +25,7 @@ using System.Reflection; using System.Security.Permissions; using System.Windows.Forms; +using Core.Common.Base; using Core.Common.Controls.Views; using Core.Common.Gui.Properties; using Core.Common.Gui.PropertyBag; @@ -34,7 +35,7 @@ /// /// View for displaying the properties of an data object. /// - public class PropertyGridView : PropertyGrid, IView + public class PropertyGridView : PropertyGrid, IView, IObserver { private readonly IPropertyResolver propertyResolver; @@ -68,6 +69,11 @@ this.propertyResolver = propertyResolver; } + public void UpdateObserver() + { + RefreshPropertyGridView(); + } + protected override void OnPropertySortChanged(EventArgs e) { // Needed for maintaining property order (no support for both categorized and alphabetical sorting) @@ -127,6 +133,9 @@ if (objectProperties != null) { objectProperties.RefreshRequired += HandleRefreshRequired; + + var observableObjectProperties = objectProperties.Data as IObservable; + observableObjectProperties?.Attach(this); } } } @@ -139,6 +148,9 @@ var disposableObjectProperties = objectProperties as IDisposable; disposableObjectProperties?.Dispose(); + + var observableObjectProperties = objectProperties.Data as IObservable; + observableObjectProperties?.Detach(this); } } @@ -171,10 +183,12 @@ { return false; } + while (root.Parent != null) { root = root.Parent; } + // Find all expanded items and put them in a list. var items = new List(); AddExpandedItems(root, items); @@ -188,6 +202,7 @@ { foundIndex = items.Count - 1; } + SelectedGridItem = items[foundIndex]; if (SelectedGridItem.GridItems.Count > 0) { @@ -203,8 +218,10 @@ { foundIndex = 0; } + SelectedGridItem = items[foundIndex]; } + if (SelectedGridItem.GridItems.Count > 0) { SelectedGridItem.Expanded = true; @@ -213,6 +230,7 @@ return true; } + return base.ProcessCmdKey(ref msg, keyData); }