diff --git a/samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs b/samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs index 96e8b49f89..f861bfab33 100644 --- a/samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs +++ b/samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs @@ -1,3 +1,4 @@ +using System; using Avalonia.Controls; using Avalonia.Markup.Xaml; using ControlCatalog.ViewModels; @@ -12,6 +13,18 @@ namespace ControlCatalog.Pages DataContext = new ContextMenuPageViewModel(); } + private ContextMenuPageViewModel _model; + protected override void OnDataContextChanged(EventArgs e) + { + if (_model != null) + _model.View = null; + _model = DataContext as ContextMenuPageViewModel; + if (_model != null) + _model.View = this; + + base.OnDataContextChanged(e); + } + private void InitializeComponent() { AvaloniaXamlLoader.Load(this); diff --git a/samples/ControlCatalog/Pages/MenuPage.xaml.cs b/samples/ControlCatalog/Pages/MenuPage.xaml.cs index 0a77607719..46dbe3dcad 100644 --- a/samples/ControlCatalog/Pages/MenuPage.xaml.cs +++ b/samples/ControlCatalog/Pages/MenuPage.xaml.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Reactive; using System.Threading.Tasks; @@ -21,5 +22,18 @@ namespace ControlCatalog.Pages { AvaloniaXamlLoader.Load(this); } + + private MenuPageViewModel _model; + protected override void OnDataContextChanged(EventArgs e) + { + if (_model != null) + _model.View = null; + _model = DataContext as MenuPageViewModel; + if (_model != null) + _model.View = this; + + base.OnDataContextChanged(e); + } + } } diff --git a/samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs b/samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs index d34e9af017..5c2f74d2d5 100644 --- a/samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs +++ b/samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs @@ -2,12 +2,14 @@ using System.Reactive; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.VisualTree; using ReactiveUI; namespace ControlCatalog.ViewModels { public class ContextMenuPageViewModel { + public Control View { get; set; } public ContextMenuPageViewModel() { OpenCommand = ReactiveCommand.CreateFromTask(Open); @@ -48,8 +50,11 @@ namespace ControlCatalog.ViewModels public async Task Open() { + var window = View?.GetVisualRoot() as Window; + if (window == null) + return; var dialog = new OpenFileDialog(); - var result = await dialog.ShowAsync(App.Current.MainWindow); + var result = await dialog.ShowAsync(window); if (result != null) { diff --git a/samples/ControlCatalog/ViewModels/MenuPageViewModel.cs b/samples/ControlCatalog/ViewModels/MenuPageViewModel.cs index 88b1bf0b6b..dc9c4a8f49 100644 --- a/samples/ControlCatalog/ViewModels/MenuPageViewModel.cs +++ b/samples/ControlCatalog/ViewModels/MenuPageViewModel.cs @@ -3,12 +3,14 @@ using System.Reactive; using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.VisualTree; using ReactiveUI; namespace ControlCatalog.ViewModels { public class MenuPageViewModel { + public Control View { get; set; } public MenuPageViewModel() { OpenCommand = ReactiveCommand.CreateFromTask(Open); @@ -65,8 +67,11 @@ namespace ControlCatalog.ViewModels public async Task Open() { + var window = View?.GetVisualRoot() as Window; + if (window == null) + return; var dialog = new OpenFileDialog(); - var result = await dialog.ShowAsync(App.Current.MainWindow); + var result = await dialog.ShowAsync(window); if (result != null) {