mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-04-14 21:26:34 +08:00
feat: add JumpTo functionality in ApplicationViewModel and integrate with menu.
This commit is contained in:
@@ -20,6 +20,14 @@
|
|||||||
</ResourceDictionary.MergedDictionaries>
|
</ResourceDictionary.MergedDictionaries>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
|
<NativeMenu.Menu>
|
||||||
|
<NativeMenu>
|
||||||
|
<NativeMenuItem
|
||||||
|
Header="About Us"
|
||||||
|
Command="{Binding JumpToCommand}"
|
||||||
|
CommandParameter="{Binding $self.Header}" />
|
||||||
|
</NativeMenu>
|
||||||
|
</NativeMenu.Menu>
|
||||||
<TrayIcon.Icons>
|
<TrayIcon.Icons>
|
||||||
<TrayIcons>
|
<TrayIcons>
|
||||||
<TrayIcon
|
<TrayIcon
|
||||||
@@ -28,7 +36,13 @@
|
|||||||
ToolTipText="Semi Avalonia Demo">
|
ToolTipText="Semi Avalonia Demo">
|
||||||
<TrayIcon.Menu>
|
<TrayIcon.Menu>
|
||||||
<NativeMenu>
|
<NativeMenu>
|
||||||
<NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
|
<NativeMenuItem
|
||||||
|
Header="About Us"
|
||||||
|
Command="{Binding JumpToCommand}"
|
||||||
|
CommandParameter="{Binding $self.Header}" />
|
||||||
|
<NativeMenuItem
|
||||||
|
Header="Exit"
|
||||||
|
Command="{Binding ExitCommand}" />
|
||||||
</NativeMenu>
|
</NativeMenu>
|
||||||
</TrayIcon.Menu>
|
</TrayIcon.Menu>
|
||||||
</TrayIcon>
|
</TrayIcon>
|
||||||
|
|||||||
@@ -2,11 +2,18 @@ using Avalonia;
|
|||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
namespace Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
public partial class ApplicationViewModel : ObservableObject
|
public partial class ApplicationViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
|
[RelayCommand]
|
||||||
|
private void JumpTo(string header)
|
||||||
|
{
|
||||||
|
WeakReferenceMessenger.Default.Send(header, "JumpTo");
|
||||||
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void Exit()
|
private void Exit()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Avalonia.Controls.ApplicationLifetimes;
|
|||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Views;
|
namespace Semi.Avalonia.Demo.Views;
|
||||||
|
|
||||||
@@ -18,6 +19,19 @@ public partial class MainView : UserControl
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.DataContext = new MainViewModel();
|
this.DataContext = new MainViewModel();
|
||||||
|
WeakReferenceMessenger.Default.Register<string, string>(this, "JumpTo", MessageHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MessageHandler(object _, string message)
|
||||||
|
{
|
||||||
|
foreach (var item in tab.ItemsView)
|
||||||
|
{
|
||||||
|
if (item is TabItem tabItem && tabItem.Header is not null && tabItem.Header.Equals(message))
|
||||||
|
{
|
||||||
|
tab.SelectedItem = tabItem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,4 +247,4 @@ public class MenuItemViewModel
|
|||||||
public ICommand? Command { get; set; }
|
public ICommand? Command { get; set; }
|
||||||
public object? CommandParameter { get; set; }
|
public object? CommandParameter { get; set; }
|
||||||
public IList<MenuItemViewModel>? Items { get; set; }
|
public IList<MenuItemViewModel>? Items { get; set; }
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user