From 1b71875276fb9df74cb65a763b9f7cbcd896512f Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Wed, 3 Nov 2021 13:10:19 +0100 Subject: [PATCH] fixes(DevTools): Null reference exception when double-clicking ClrProperties --- .../ViewModels/ControlDetailsViewModel.cs | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs index ba3fafdfaf..65e9c4854c 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs @@ -24,7 +24,7 @@ namespace Avalonia.Diagnostics.ViewModels private bool _showInactiveStyles; private string? _styleStatus; private object _selectedEntity; - private readonly Stack> _selectedEntitiesStack = new Stack>(); + private readonly Stack<(string Name, object Entry)> _selectedEntitiesStack = new(); private string _selectedEntityName; private string _selectedEntityType; @@ -399,17 +399,25 @@ namespace Avalonia.Diagnostics.ViewModels public void ApplySelectedProperty() { - if (SelectedProperty == null) return; - - var property = (_selectedEntity as IControl)?.GetValue(SelectedProperty.Key as AvaloniaProperty); - if (property == null) + var selectedProperty = SelectedProperty; + var selectedEntity = SelectedEntity; + var selectedEntityName = SelectedEntityName; + if (selectedProperty == null) + return; + + object? property; + if (selectedProperty.Key is AvaloniaProperty avaloniaProperty) + { + property = (_selectedEntity as IControl)?.GetValue(avaloniaProperty); + } + else { - property = _selectedEntity.GetType().GetProperty(SelectedProperty.Name)?.GetValue(_selectedEntity); + property = _selectedEntity.GetType().GetProperty(selectedProperty.Name)?.GetValue(_selectedEntity); } if (property == null) return; - _selectedEntitiesStack.Push(new Tuple(SelectedEntityName, SelectedEntity)); - NavigateToProperty(property, SelectedProperty.Name); + _selectedEntitiesStack.Push((Name:selectedEntityName,Entry:selectedEntity)); + NavigateToProperty(property, selectedProperty.Name); } public void ApplyParentProperty() @@ -417,7 +425,7 @@ namespace Avalonia.Diagnostics.ViewModels if (_selectedEntitiesStack.Any()) { var property = _selectedEntitiesStack.Pop(); - NavigateToProperty(property.Item2, property.Item1); + NavigateToProperty(property.Entry, property.Name); } }