diff options
author | Eric Maupin <ermaup@microsoft.com> | 2018-08-31 21:24:05 +0300 |
---|---|---|
committer | Eric Maupin <ermaup@microsoft.com> | 2018-08-31 21:24:08 +0300 |
commit | 1a6f3bef20884741e1e19d35457fda38cb1dac21 (patch) | |
tree | fcb02adbbab8330eb12589b72f151cdce07f69ec /Xamarin.PropertyEditing.Windows | |
parent | b875e0c1a6fabed19e02c4148e829ddd91a4ed38 (diff) |
[Win] Do not rely on e.OldValue in DataContextChanged
When items are disconnected, you do not get the proper oldvalue in
e.OldValue, you get a {DisconnectedItem} instead. We need to rely on our
own tracking of the VM we were subscribed to so we can unsubscribe.
Diffstat (limited to 'Xamarin.PropertyEditing.Windows')
-rw-r--r-- | Xamarin.PropertyEditing.Windows/ObjectEditorControl.cs | 17 | ||||
-rw-r--r-- | Xamarin.PropertyEditing.Windows/PropertyButton.cs | 10 |
2 files changed, 14 insertions, 13 deletions
diff --git a/Xamarin.PropertyEditing.Windows/ObjectEditorControl.cs b/Xamarin.PropertyEditing.Windows/ObjectEditorControl.cs index 7ecd891..eec3c44 100644 --- a/Xamarin.PropertyEditing.Windows/ObjectEditorControl.cs +++ b/Xamarin.PropertyEditing.Windows/ObjectEditorControl.cs @@ -16,24 +16,25 @@ namespace Xamarin.PropertyEditing.Windows DataContextChanged += OnDataContextChanged; } + private ObjectPropertyViewModel vm; + private void OnDataContextChanged (object sender, DependencyPropertyChangedEventArgs e) { - var vm = e.OldValue as ObjectPropertyViewModel; - if (vm != null) - vm.TypeRequested -= OnTypeRequested; + if (this.vm != null) + this.vm.TypeRequested -= OnTypeRequested; - vm = e.NewValue as ObjectPropertyViewModel; - if (vm != null) - vm.TypeRequested += OnTypeRequested; + this.vm = e.NewValue as ObjectPropertyViewModel; + if (this.vm != null) + this.vm.TypeRequested += OnTypeRequested; } private void OnTypeRequested (object sender, TypeRequestedEventArgs e) { - var vm = (ObjectPropertyViewModel)sender; + var vsender = (ObjectPropertyViewModel)sender; var panel = this.FindPropertiesHost (); - ITypeInfo type = TypeSelectorWindow.RequestType (panel, vm.AssignableTypes); + ITypeInfo type = TypeSelectorWindow.RequestType (panel, vsender.AssignableTypes); e.SelectedType = type; } } diff --git a/Xamarin.PropertyEditing.Windows/PropertyButton.cs b/Xamarin.PropertyEditing.Windows/PropertyButton.cs index ef59783..89434de 100644 --- a/Xamarin.PropertyEditing.Windows/PropertyButton.cs +++ b/Xamarin.PropertyEditing.Windows/PropertyButton.cs @@ -100,11 +100,11 @@ namespace Xamarin.PropertyEditing.Windows private void OnDataContextChanged (object sender, DependencyPropertyChangedEventArgs e) { - if (e.OldValue is PropertyViewModel pvm) { - pvm.PropertyChanged -= OnPropertyChanged; - pvm.ResourceRequested -= OnResourceRequested; - pvm.CreateBindingRequested -= OnCreateBindingRequested; - pvm.CreateResourceRequested -= OnCreateResourceRequested; + if (this.vm != null) { + this.vm.PropertyChanged -= OnPropertyChanged; + this.vm.ResourceRequested -= OnResourceRequested; + this.vm.CreateBindingRequested -= OnCreateBindingRequested; + this.vm.CreateResourceRequested -= OnCreateResourceRequested; } this.vm = e.NewValue as PropertyViewModel; |