Browse Source

Bugfix Exception when Deleting Objects ...

(Then Bindings should not be changed!)
pull/614/head
jkuehner 12 years ago
parent
commit
ca257e4a45
  1. 36
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs

36
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs

@ -96,24 +96,26 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
/// <param name="newName"></param> /// <param name="newName"></param>
public void FixDesignItemReferencesOnNameChange(string oldName, string newName) public void FixDesignItemReferencesOnNameChange(string oldName, string newName)
{ {
var root = GetRootXamlObject(this.XamlObject); if (!string.IsNullOrEmpty(oldName) && !string.IsNullOrEmpty(newName)) {
var references = GetAllChildXamlObjects(root).Where(x => x.ElementType == typeof(Reference) && Equals(x.FindOrCreateProperty("Name").ValueOnInstance, oldName)); var root = GetRootXamlObject(this.XamlObject);
foreach (var designItem in references) var references = GetAllChildXamlObjects(root).Where(x => x.ElementType == typeof(Reference) && Equals(x.FindOrCreateProperty("Name").ValueOnInstance, oldName));
{ foreach (var designItem in references)
var property = designItem.FindOrCreateProperty("Name"); {
var propertyValue = designItem.OwnerDocument.CreatePropertyValue(newName, property); var property = designItem.FindOrCreateProperty("Name");
this.ComponentService.RegisterXamlComponentRecursive(propertyValue as XamlObject); var propertyValue = designItem.OwnerDocument.CreatePropertyValue(newName, property);
property.PropertyValue = propertyValue; this.ComponentService.RegisterXamlComponentRecursive(propertyValue as XamlObject);
} property.PropertyValue = propertyValue;
}
root = GetRootXamlObject(this.XamlObject, true); root = GetRootXamlObject(this.XamlObject, true);
var bindings = GetAllChildXamlObjects(root, true).Where(x => x.ElementType == typeof(Binding) && Equals(x.FindOrCreateProperty("ElementName").ValueOnInstance, oldName)); var bindings = GetAllChildXamlObjects(root, true).Where(x => x.ElementType == typeof(Binding) && Equals(x.FindOrCreateProperty("ElementName").ValueOnInstance, oldName));
foreach (var designItem in bindings) foreach (var designItem in bindings)
{ {
var property = designItem.FindOrCreateProperty("ElementName"); var property = designItem.FindOrCreateProperty("ElementName");
var propertyValue = designItem.OwnerDocument.CreatePropertyValue(newName, property); var propertyValue = designItem.OwnerDocument.CreatePropertyValue(newName, property);
this.ComponentService.RegisterXamlComponentRecursive(propertyValue as XamlObject); this.ComponentService.RegisterXamlComponentRecursive(propertyValue as XamlObject);
property.PropertyValue = propertyValue; property.PropertyValue = propertyValue;
}
} }
} }

Loading…
Cancel
Save