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);
}