Browse Source

Correctly handle TreeViewPage data context change.

Fixes #11120.
pull/11131/head
Steven Kirk 3 years ago
parent
commit
6c8afc714c
  1. 28
      src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs

28
src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs

@ -39,16 +39,6 @@ namespace Avalonia.Diagnostics.Views
AdornerLayer.SetIsClipEnabled(_adorner, false);
}
protected override void OnDataContextChanged(EventArgs e)
{
base.OnDataContextChanged(e);
((TreePageViewModel)DataContext!).ClipboardCopyRequested += (sender, s) =>
{
TopLevel.GetTopLevel(this)?.Clipboard?.SetTextAsync(s);
};
}
protected void AddAdorner(object? sender, PointerEventArgs e)
{
var node = (TreeNode?)((Control)sender!).DataContext;
@ -108,9 +98,27 @@ namespace Avalonia.Diagnostics.Views
_currentLayer = null;
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
if (change.Property == DataContextProperty)
{
if (change.GetOldValue<object?>() is TreePageViewModel oldViewModel)
oldViewModel.ClipboardCopyRequested -= OnClipboardCopyRequested;
if (change.GetNewValue<object?>() is TreePageViewModel newViewModel)
newViewModel.ClipboardCopyRequested += OnClipboardCopyRequested;
}
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
private void OnClipboardCopyRequested(object? sender, string e)
{
TopLevel.GetTopLevel(this)?.Clipboard?.SetTextAsync(e);
}
}
}

Loading…
Cancel
Save