From ced3c6bd53d91ccc52f5e6d081c37e4f8f4b23e0 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 12 Sep 2018 23:24:29 +0200 Subject: [PATCH] Demonstrate binding commands. --- samples/ControlCatalog/Pages/MenuPage.xaml | 4 +- samples/ControlCatalog/Pages/MenuPage.xaml.cs | 69 +++++++++++++++++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/samples/ControlCatalog/Pages/MenuPage.xaml b/samples/ControlCatalog/Pages/MenuPage.xaml index 6eeb86a00f..c5aa35312c 100644 --- a/samples/ControlCatalog/Pages/MenuPage.xaml +++ b/samples/ControlCatalog/Pages/MenuPage.xaml @@ -36,11 +36,13 @@ Dyanamically generated - + diff --git a/samples/ControlCatalog/Pages/MenuPage.xaml.cs b/samples/ControlCatalog/Pages/MenuPage.xaml.cs index 01add3e76e..ec7c000fe6 100644 --- a/samples/ControlCatalog/Pages/MenuPage.xaml.cs +++ b/samples/ControlCatalog/Pages/MenuPage.xaml.cs @@ -1,6 +1,10 @@ using System.Collections.Generic; +using System.Reactive; +using System.Threading.Tasks; +using System.Windows.Input; using Avalonia.Controls; using Avalonia.Markup.Xaml; +using ReactiveUI; namespace ControlCatalog.Pages { @@ -9,23 +13,35 @@ namespace ControlCatalog.Pages public MenuPage() { this.InitializeComponent(); - DataContext = new[] + var vm = new MenuPageViewModel(); + + vm.MenuItems = new[] { new MenuItemViewModel { Header = "_File", Items = new[] { - new MenuItemViewModel { Header = "_Open..." }, - new MenuItemViewModel { Header = "Save" }, + new MenuItemViewModel { Header = "_Open...", Command = vm.OpenCommand }, + new MenuItemViewModel { Header = "Save", Command = vm.SaveCommand }, new MenuItemViewModel { Header = "-" }, new MenuItemViewModel { Header = "Recent", Items = new[] { - new MenuItemViewModel { Header = "File1.txt" }, - new MenuItemViewModel { Header = "File2.txt" }, + new MenuItemViewModel + { + Header = "File1.txt", + Command = vm.OpenRecentCommand, + CommandParameter = @"c:\foo\File1.txt" + }, + new MenuItemViewModel + { + Header = "File2.txt", + Command = vm.OpenRecentCommand, + CommandParameter = @"c:\foo\File2.txt" + }, } }, } @@ -40,6 +56,8 @@ namespace ControlCatalog.Pages } } }; + + DataContext = vm; } private void InitializeComponent() @@ -48,9 +66,50 @@ namespace ControlCatalog.Pages } } + public class MenuPageViewModel + { + public MenuPageViewModel() + { + OpenCommand = ReactiveCommand.CreateFromTask(Open); + SaveCommand = ReactiveCommand.Create(Save); + OpenRecentCommand = ReactiveCommand.Create(OpenRecent); + } + + public IReadOnlyList MenuItems { get; set; } + public ReactiveCommand OpenCommand { get; } + public ReactiveCommand SaveCommand { get; } + public ReactiveCommand OpenRecentCommand { get; } + + public async Task Open() + { + var dialog = new OpenFileDialog(); + var result = await dialog.ShowAsync(); + + if (result != null) + { + foreach (var path in result) + { + System.Diagnostics.Debug.WriteLine($"Opened: {path}"); + } + } + } + + public void Save() + { + System.Diagnostics.Debug.WriteLine("Save"); + } + + public void OpenRecent(string path) + { + System.Diagnostics.Debug.WriteLine($"Open recent: {path}"); + } + } + public class MenuItemViewModel { public string Header { get; set; } + public ICommand Command { get; set; } + public object CommandParameter { get; set; } public IList Items { get; set; } } }