Index: src/Common/DelftTools.Controls.Swf/DataEditorGenerator/DataEditor.cs =================================================================== diff -u -r8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9 -r5fc71a385897af92ccb092f2f969b5709afab85a --- src/Common/DelftTools.Controls.Swf/DataEditorGenerator/DataEditor.cs (.../DataEditor.cs) (revision 8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9) +++ src/Common/DelftTools.Controls.Swf/DataEditorGenerator/DataEditor.cs (.../DataEditor.cs) (revision 5fc71a385897af92ccb092f2f969b5709afab85a) @@ -6,6 +6,7 @@ using DelftTools.Controls.Swf.DataEditorGenerator.Binding; using DelftTools.Controls.Swf.DataEditorGenerator.Binding.ControlBindings; using DelftTools.Utils.Collections; +using IEditableObject = DelftTools.Utils.Editing.IEditableObject; namespace DelftTools.Controls.Swf.DataEditorGenerator { @@ -15,28 +16,22 @@ /// public class DataEditor : Panel { - public ICollection Bindings { get; private set; } - + private object data; + public DataEditor() { Dock = DockStyle.Fill; //default fill Bindings = new Collection(); } - /// - /// Gets the custom controls contained in this data editor. Provided for convenience: to - /// perform any manual data binding / customizations etc. - /// - /// - public IEnumerable GetCustomControls() - { - return Bindings.OfType().Select(ccb => ccb.EditControl); - } + public ICollection Bindings { get; private set; } - private object data; public object Data { - get { return data; } + get + { + return data; + } set { if (data != null) @@ -46,7 +41,7 @@ { propertyChanged.PropertyChanged -= DataPropertyChanged; } - + this.GetAllControlsRecursive().ForEach(a => a.CancelEdit()); foreach (var binding in Bindings) @@ -60,10 +55,14 @@ if (data != null) { foreach (var binding in Bindings) + { binding.Data = data; + } foreach (var binding in Bindings) + { binding.Validate(binding.FieldDescription.GetValue(data)); + } var propertyChanged = data as INotifyPropertyChanged; if (propertyChanged != null) @@ -74,11 +73,23 @@ } } - void DataPropertyChanged(object sender, PropertyChangedEventArgs e) + /// + /// Gets the custom controls contained in this data editor. Provided for convenience: to + /// perform any manual data binding / customizations etc. + /// + /// + public IEnumerable GetCustomControls() { - var dataAsEditableObject = data as Utils.Editing.IEditableObject; + return Bindings.OfType().Select(ccb => ccb.EditControl); + } + + private void DataPropertyChanged(object sender, PropertyChangedEventArgs e) + { + var dataAsEditableObject = data as IEditableObject; if (dataAsEditableObject != null && dataAsEditableObject.IsEditing) + { return; // still editing, skip + } foreach (var binding in Bindings) {