Browse Source

Don't use global variables in ControlCatalog

pre-lifetime-fixes
Nikita Tsukanov 7 years ago
parent
commit
9efdffe875
  1. 13
      samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs
  2. 14
      samples/ControlCatalog/Pages/MenuPage.xaml.cs
  3. 7
      samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs
  4. 7
      samples/ControlCatalog/ViewModels/MenuPageViewModel.cs

13
samples/ControlCatalog/Pages/ContextMenuPage.xaml.cs

@ -1,3 +1,4 @@
using System;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using ControlCatalog.ViewModels; using ControlCatalog.ViewModels;
@ -12,6 +13,18 @@ namespace ControlCatalog.Pages
DataContext = new ContextMenuPageViewModel(); 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() private void InitializeComponent()
{ {
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);

14
samples/ControlCatalog/Pages/MenuPage.xaml.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reactive; using System.Reactive;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -21,5 +22,18 @@ namespace ControlCatalog.Pages
{ {
AvaloniaXamlLoader.Load(this); 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);
}
} }
} }

7
samples/ControlCatalog/ViewModels/ContextMenuPageViewModel.cs

@ -2,12 +2,14 @@
using System.Reactive; using System.Reactive;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.VisualTree;
using ReactiveUI; using ReactiveUI;
namespace ControlCatalog.ViewModels namespace ControlCatalog.ViewModels
{ {
public class ContextMenuPageViewModel public class ContextMenuPageViewModel
{ {
public Control View { get; set; }
public ContextMenuPageViewModel() public ContextMenuPageViewModel()
{ {
OpenCommand = ReactiveCommand.CreateFromTask(Open); OpenCommand = ReactiveCommand.CreateFromTask(Open);
@ -48,8 +50,11 @@ namespace ControlCatalog.ViewModels
public async Task Open() public async Task Open()
{ {
var window = View?.GetVisualRoot() as Window;
if (window == null)
return;
var dialog = new OpenFileDialog(); var dialog = new OpenFileDialog();
var result = await dialog.ShowAsync(App.Current.MainWindow); var result = await dialog.ShowAsync(window);
if (result != null) if (result != null)
{ {

7
samples/ControlCatalog/ViewModels/MenuPageViewModel.cs

@ -3,12 +3,14 @@ using System.Reactive;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.VisualTree;
using ReactiveUI; using ReactiveUI;
namespace ControlCatalog.ViewModels namespace ControlCatalog.ViewModels
{ {
public class MenuPageViewModel public class MenuPageViewModel
{ {
public Control View { get; set; }
public MenuPageViewModel() public MenuPageViewModel()
{ {
OpenCommand = ReactiveCommand.CreateFromTask(Open); OpenCommand = ReactiveCommand.CreateFromTask(Open);
@ -65,8 +67,11 @@ namespace ControlCatalog.ViewModels
public async Task Open() public async Task Open()
{ {
var window = View?.GetVisualRoot() as Window;
if (window == null)
return;
var dialog = new OpenFileDialog(); var dialog = new OpenFileDialog();
var result = await dialog.ShowAsync(App.Current.MainWindow); var result = await dialog.ShowAsync(window);
if (result != null) if (result != null)
{ {

Loading…
Cancel
Save