Files
2023-02-10 17:49:58 -05:00

139 lines
3.8 KiB
C#

using System;
using System.Threading.Tasks;
using FluentAvalonia.UI.Controls;
using FluentAvaloniaSamples.Pages.SamplePageAssets;
using FluentAvaloniaSamples.Utilities;
namespace FluentAvaloniaSamples.ViewModels;
public class ContentDialogPageViewModel : ViewModelBase
{
public ContentDialogPageViewModel()
{
LaunchDialogCommand = new FACommand(ExecuteLaunchCommand);
}
public string Title
{
get => _title;
set => RaiseAndSetIfChanged(ref _title, value);
}
public string Content
{
get => _content;
set => RaiseAndSetIfChanged(ref _content, value);
}
public string PrimaryButtonText
{
get => _primaryText;
set => RaiseAndSetIfChanged(ref _primaryText, value);
}
public string SecondaryButtonText
{
get => _secondaryText;
set => RaiseAndSetIfChanged(ref _secondaryText, value);
}
public string CloseButtonText
{
get => _closeText;
set => RaiseAndSetIfChanged(ref _closeText, value);
}
public bool FullSizeDesired
{
get => _fullSize;
set => RaiseAndSetIfChanged(ref _fullSize, value);
}
public ContentDialogButton[] ContentDialogButtons { get; } = Enum.GetValues<ContentDialogButton>();
public ContentDialogButton ContentDialogDefaultButton
{
get => _defaultButton;
set => RaiseAndSetIfChanged(ref _defaultButton, value);
}
public bool IsPrimaryButtonEnabled
{
get => _primaryEnabled;
set => RaiseAndSetIfChanged(ref _primaryEnabled, value);
}
public bool IsSecondaryButtonEnabled
{
get => _secondaryEnabled;
set => RaiseAndSetIfChanged(ref _secondaryEnabled, value);
}
public FACommand LaunchDialogCommand { get; }
public async void ExecuteLaunchCommand(object parameter)
{
bool hasDeferral = bool.Parse(parameter.ToString());
var cd = new ContentDialog
{
PrimaryButtonText = PrimaryButtonText,
SecondaryButtonText = SecondaryButtonText,
CloseButtonText = CloseButtonText,
Title = Title,
Content = Content,
IsPrimaryButtonEnabled = IsPrimaryButtonEnabled,
IsSecondaryButtonEnabled = IsSecondaryButtonEnabled,
DefaultButton = ContentDialogDefaultButton,
FullSizeDesired = FullSizeDesired
};
if (hasDeferral)
{
cd.PrimaryButtonClick += OnPrimaryButtonClick;
await cd.ShowAsync();
cd.PrimaryButtonClick -= OnPrimaryButtonClick;
}
else
{
await cd.ShowAsync();
}
}
private async void OnPrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
var def = args.GetDeferral();
await Task.Delay(3000);
def.Complete();
}
public async void ShowInputDialogAsync()
{
var dialog = new ContentDialog()
{
Title = "Let's go ...",
PrimaryButtonText = "Ok :-)",
SecondaryButtonText = "Not OK :-(",
CloseButtonText = "Leave me alone!"
};
var viewModel = new CustomContentDialogViewModel(dialog);
dialog.Content = new ContentDialogInputExample()
{
DataContext = viewModel
};
_ = await dialog.ShowAsync();
}
private string _title = "Title Here";
private string _content = "Dialog message here (doesn't have to be a string, can be anything)";
private string _primaryText = "Primary Button";
private string _secondaryText = "Secondary Button";
private string _closeText = "Close Button";
private bool _fullSize;
private ContentDialogButton _defaultButton;
private bool _primaryEnabled = true;
private bool _secondaryEnabled = true;
}