diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-12-27 16:20:19 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-12-27 16:20:19 +0100 |
| commit | 2b4455e6bf46809f699a3fcf1d51e8e99fbcf6f8 (patch) | |
| tree | 142f5f765a01a2c469bb8bc814b3ed38bdfc2c4c /src/GraphicObjects/GraphicObject.cs | |
| parent | 66fb8b51703e2516a04504398d5ab7ed9af6840b (diff) | |
use LogicalParent in binding, debug Parenting and DS changes in several classes
Diffstat (limited to 'src/GraphicObjects/GraphicObject.cs')
| -rw-r--r-- | src/GraphicObjects/GraphicObject.cs | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index a2f9be7c..1be9d4cf 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -140,9 +140,12 @@ namespace Crow return; if (logicalParent != null) (logicalParent as GraphicObject).DataSourceChanged -= onLogicalParentDataSourceChanged; + DataSourceChangeEventArgs dsce = new DataSourceChangeEventArgs (LogicalParent, null); logicalParent = value; + dsce.NewDataSource = LogicalParent; if (logicalParent != null) (logicalParent as GraphicObject).DataSourceChanged += onLogicalParentDataSourceChanged; + onLogicalParentChanged (this, dsce); } } [XmlIgnore]public virtual Rectangle ClientRectangle { @@ -186,6 +189,7 @@ namespace Crow public event EventHandler<LayoutingEventArgs> LayoutChanged; public event EventHandler<DataSourceChangeEventArgs> DataSourceChanged; public event EventHandler<DataSourceChangeEventArgs> ParentChanged; + public event EventHandler<DataSourceChangeEventArgs> LogicalParentChanged; #endregion #region public properties @@ -535,37 +539,30 @@ namespace Crow [XmlAttributeAttribute][DefaultValue(null)] public virtual object DataSource { set { - if (dataSource == value) + if (DataSource == value) return; - DataSourceChangeEventArgs dse = new DataSourceChangeEventArgs (dataSource, value); + DataSourceChangeEventArgs dse = new DataSourceChangeEventArgs (DataSource, null); dataSource = value; + dse.NewDataSource = DataSource; OnDataSourceChanged (this, dse); NotifyValueChanged ("DataSource", DataSource); } get { - return dataSource == null ? LogicalParent == null ? null : - LogicalParent is GraphicObject ? - (LogicalParent as GraphicObject).DataSource : null : dataSource; + return dataSource == null ? + LogicalParent == null ? null : + LogicalParent is GraphicObject ? (LogicalParent as GraphicObject).DataSource : null : + dataSource; } } protected virtual void onLogicalParentDataSourceChanged(object sender, DataSourceChangeEventArgs e){ - ILayoutable tmp = Parent; - if (tmp == null) { - Debug.WriteLine ("parent is null for: " + this.ToString ()); - return; - } - while (tmp != sender) { - if (!(tmp as GraphicObject).localDataSourceIsNull) { - OnDataSourceChanged (sender, e); - return; - } - tmp = tmp.Parent; - } + if (localDataSourceIsNull) + OnDataSourceChanged (this, e); } internal bool localDataSourceIsNull { get { return dataSource == null; } } + internal bool localLogicalParentIsNull { get { return logicalParent == null; } } public virtual void OnDataSourceChanged(object sender, DataSourceChangeEventArgs e){ DataSourceChanged.Raise (this, e); @@ -1254,9 +1251,13 @@ namespace Crow Disabled.Raise (this, e); } protected virtual void onParentChanged(object sender, DataSourceChangeEventArgs e) { - ParentChanged.Raise (sender, e); + ParentChanged.Raise (this, e); + if (logicalParent == null) + LogicalParentChanged.Raise (this, e); + } + protected virtual void onLogicalParentChanged(object sender, DataSourceChangeEventArgs e) { + LogicalParentChanged.Raise (this, e); } - #region IXmlSerializable public virtual System.Xml.Schema.XmlSchema GetSchema () { |