diff --git a/src/Perspex.Controls/MenuItem.cs b/src/Perspex.Controls/MenuItem.cs index 36663ddfb9..77b5143487 100644 --- a/src/Perspex.Controls/MenuItem.cs +++ b/src/Perspex.Controls/MenuItem.cs @@ -9,6 +9,7 @@ using Perspex.Controls.Primitives; using Perspex.Controls.Templates; using Perspex.Input; using Perspex.Interactivity; +using Perspex.LogicalTree; using Perspex.Threading; namespace Perspex.Controls @@ -92,6 +93,7 @@ namespace Perspex.Controls { SelectableMixin.Attach(IsSelectedProperty); FocusableProperty.OverrideDefaultValue(true); + IconProperty.Changed.AddClassHandler(x => x.IconChanged); ItemsPanelProperty.OverrideDefaultValue(DefaultPanel); ClickEvent.AddClassHandler(x => x.OnClick); SubmenuOpenedEvent.AddClassHandler(x => x.OnSubmenuOpened); @@ -391,6 +393,26 @@ namespace Perspex.Controls } } + /// + /// Called when the property changes. + /// + /// The property change event. + private void IconChanged(PerspexPropertyChangedEventArgs e) + { + var oldValue = e.OldValue as ILogical; + var newValue = e.NewValue as ILogical; + + if (oldValue != null) + { + LogicalChildren.Remove(oldValue); + } + + if (newValue != null) + { + LogicalChildren.Add(newValue); + } + } + /// /// Called when the property changes. /// diff --git a/src/Perspex.Controls/Mixins/ContentControlMixin.cs b/src/Perspex.Controls/Mixins/ContentControlMixin.cs index b1fc17624b..35580081ef 100644 --- a/src/Perspex.Controls/Mixins/ContentControlMixin.cs +++ b/src/Perspex.Controls/Mixins/ContentControlMixin.cs @@ -64,12 +64,19 @@ namespace Perspex.Controls.Mixins var logicalChildren = logicalChildrenSelector(sender); var subscription = presenter - .GetObservable(ContentPresenter.ChildProperty) + .GetObservableWithHistory(ContentPresenter.ChildProperty) .Subscribe(child => UpdateLogicalChild( sender, logicalChildren, - logicalChildren.FirstOrDefault(), - child)); + child.Item1, + child.Item2)); + + UpdateLogicalChild( + sender, + logicalChildren, + null, + presenter.GetValue(ContentPresenter.ChildProperty)); + subscriptions.Value.Add(sender, subscription); } }