csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.6 KiB
103 lines
3.6 KiB
using System.Reactive;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Avalonia.Controls.Notifications;
|
|
using Avalonia.Dialogs;
|
|
using ReactiveUI;
|
|
|
|
namespace ControlCatalog.ViewModels
|
|
{
|
|
class MainWindowViewModel : ReactiveObject
|
|
{
|
|
private IManagedNotificationManager _notificationManager;
|
|
|
|
private bool _isMenuItemChecked = true;
|
|
private WindowState _windowState;
|
|
private WindowState[] _windowStates;
|
|
|
|
public MainWindowViewModel(IManagedNotificationManager notificationManager)
|
|
{
|
|
_notificationManager = notificationManager;
|
|
|
|
ShowCustomManagedNotificationCommand = ReactiveCommand.Create(() =>
|
|
{
|
|
NotificationManager.Show(new NotificationViewModel(NotificationManager) { Title = "Hey There!", Message = "Did you know that Avalonia now supports Custom In-Window Notifications?" });
|
|
});
|
|
|
|
ShowManagedNotificationCommand = ReactiveCommand.Create(() =>
|
|
{
|
|
NotificationManager.Show(new Avalonia.Controls.Notifications.Notification("Welcome", "Avalonia now supports Notifications.", NotificationType.Information));
|
|
});
|
|
|
|
ShowNativeNotificationCommand = ReactiveCommand.Create(() =>
|
|
{
|
|
NotificationManager.Show(new Avalonia.Controls.Notifications.Notification("Error", "Native Notifications are not quite ready. Coming soon.", NotificationType.Error));
|
|
});
|
|
|
|
AboutCommand = ReactiveCommand.CreateFromTask(async () =>
|
|
{
|
|
var dialog = new AboutAvaloniaDialog();
|
|
|
|
var mainWindow = (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow;
|
|
|
|
await dialog.ShowDialog(mainWindow);
|
|
});
|
|
|
|
ExitCommand = ReactiveCommand.Create(() =>
|
|
{
|
|
(App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime).Shutdown();
|
|
});
|
|
|
|
ToggleMenuItemCheckedCommand = ReactiveCommand.Create(() =>
|
|
{
|
|
IsMenuItemChecked = !IsMenuItemChecked;
|
|
});
|
|
|
|
WindowState = WindowState.Normal;
|
|
|
|
WindowStates = new WindowState[]
|
|
{
|
|
WindowState.Minimized,
|
|
WindowState.Normal,
|
|
WindowState.Maximized,
|
|
WindowState.FullScreen,
|
|
};
|
|
}
|
|
|
|
public WindowState WindowState
|
|
{
|
|
get { return _windowState; }
|
|
set { this.RaiseAndSetIfChanged(ref _windowState, value); }
|
|
}
|
|
|
|
public WindowState[] WindowStates
|
|
{
|
|
get { return _windowStates; }
|
|
set { this.RaiseAndSetIfChanged(ref _windowStates, value); }
|
|
}
|
|
|
|
public IManagedNotificationManager NotificationManager
|
|
{
|
|
get { return _notificationManager; }
|
|
set { this.RaiseAndSetIfChanged(ref _notificationManager, value); }
|
|
}
|
|
|
|
public bool IsMenuItemChecked
|
|
{
|
|
get { return _isMenuItemChecked; }
|
|
set { this.RaiseAndSetIfChanged(ref _isMenuItemChecked, value); }
|
|
}
|
|
|
|
public ReactiveCommand<Unit, Unit> ShowCustomManagedNotificationCommand { get; }
|
|
|
|
public ReactiveCommand<Unit, Unit> ShowManagedNotificationCommand { get; }
|
|
|
|
public ReactiveCommand<Unit, Unit> ShowNativeNotificationCommand { get; }
|
|
|
|
public ReactiveCommand<Unit, Unit> AboutCommand { get; }
|
|
|
|
public ReactiveCommand<Unit, Unit> ExitCommand { get; }
|
|
|
|
public ReactiveCommand<Unit, Unit> ToggleMenuItemCheckedCommand { get; }
|
|
}
|
|
}
|
|
|