Browse Source

Merge branch 'fixes/1904-fillresult' of https://github.com/Gillibald/Avalonia into fixes/1904-fillresult

pull/1905/head
Benedikt Schroeder 7 years ago
parent
commit
334c2c1983
  1. 4
      samples/ControlCatalog/Pages/MenuPage.xaml
  2. 69
      samples/ControlCatalog/Pages/MenuPage.xaml.cs

4
samples/ControlCatalog/Pages/MenuPage.xaml

@ -36,11 +36,13 @@
<StackPanel> <StackPanel>
<TextBlock Classes="h3" Margin="4 8">Dyanamically generated</TextBlock> <TextBlock Classes="h3" Margin="4 8">Dyanamically generated</TextBlock>
<Menu Items="{Binding}"> <Menu Items="{Binding MenuItems}">
<Menu.Styles> <Menu.Styles>
<Style Selector="MenuItem"> <Style Selector="MenuItem">
<Setter Property="Header" Value="{Binding Header}"/> <Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Items" Value="{Binding Items}"/> <Setter Property="Items" Value="{Binding Items}"/>
<Setter Property="Command" Value="{Binding Command}"/>
<Setter Property="CommandParameter" Value="{Binding CommandParameter}"/>
</Style> </Style>
</Menu.Styles> </Menu.Styles>
</Menu> </Menu>

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

@ -1,6 +1,10 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Reactive;
using System.Threading.Tasks;
using System.Windows.Input;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using ReactiveUI;
namespace ControlCatalog.Pages namespace ControlCatalog.Pages
{ {
@ -9,23 +13,35 @@ namespace ControlCatalog.Pages
public MenuPage() public MenuPage()
{ {
this.InitializeComponent(); this.InitializeComponent();
DataContext = new[] var vm = new MenuPageViewModel();
vm.MenuItems = new[]
{ {
new MenuItemViewModel new MenuItemViewModel
{ {
Header = "_File", Header = "_File",
Items = new[] Items = new[]
{ {
new MenuItemViewModel { Header = "_Open..." }, new MenuItemViewModel { Header = "_Open...", Command = vm.OpenCommand },
new MenuItemViewModel { Header = "Save" }, new MenuItemViewModel { Header = "Save", Command = vm.SaveCommand },
new MenuItemViewModel { Header = "-" }, new MenuItemViewModel { Header = "-" },
new MenuItemViewModel new MenuItemViewModel
{ {
Header = "Recent", Header = "Recent",
Items = new[] Items = new[]
{ {
new MenuItemViewModel { Header = "File1.txt" }, new MenuItemViewModel
new MenuItemViewModel { Header = "File2.txt" }, {
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() 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<string>(OpenRecent);
}
public IReadOnlyList<MenuItemViewModel> MenuItems { get; set; }
public ReactiveCommand<Unit, Unit> OpenCommand { get; }
public ReactiveCommand<Unit, Unit> SaveCommand { get; }
public ReactiveCommand<string, Unit> 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 class MenuItemViewModel
{ {
public string Header { get; set; } public string Header { get; set; }
public ICommand Command { get; set; }
public object CommandParameter { get; set; }
public IList<MenuItemViewModel> Items { get; set; } public IList<MenuItemViewModel> Items { get; set; }
} }
} }

Loading…
Cancel
Save