Prism.Formsでは、IPageDialogServiceというインターフェースが提供されていて、ダイアログの表示もばっちりViewModelで出来るようになっています。
IPageDialogServiceには、DisplayAlertメソッドと、DisplayActionSheetメソッドが定義されています。DisplayAlertメソッドは単純なアラートダイアログを出して、DisplayActionSheetメソッドは選択肢を提供するメソッドになります。
DisplayActionSheetメソッドは、キャンセルのメッセージ、破棄のメッセージ、その他のメッセージの可変長引数という形になっています。さくっと使ってみましょう。
publicclass MainPageViewModel : BindableBase, INavigationAware { privatestring _title; publicstring Title { get { return _title; } set { SetProperty(ref _title, value); } } public DelegateCommand AlertCommand { get; } public DelegateCommand ConfirmCommand { get; } public MainPageViewModel(IPageDialogService pageDialogService) { this.AlertCommand = new DelegateCommand(async () => { await pageDialogService.DisplayAlert("Title", "Hello world", "キャンセル"); }); this.ConfirmCommand = new DelegateCommand(async () => { var result = await pageDialogService.DisplayActionSheet("Title", "キャンセル", "破棄", "やってやんよ", "やってやんよ2"); await pageDialogService.DisplayAlert("選択したもの", result, "閉じる"); }); } publicvoid OnNavigatedFrom(NavigationParameters parameters) { } publicvoid OnNavigatedTo(NavigationParameters parameters) { if (parameters.ContainsKey("title")) Title = (string)parameters["title"] + " and Prism"; } }
XAML側でボタンを2つおいて、Commandをバインドしておきます。
<?xml version="1.0" encoding="utf-8"?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"prism:ViewModelLocator.AutowireViewModel="True"x:Class="PrismUnityApp9.Views.MainPage"Title="MainPage"><StackLayout HorizontalOptions="Center"VerticalOptions="Center"><Label Text="{Binding Title}" /><Button Text="Alert"Command="{Binding AlertCommand}" /><Button Text="Confirm"Command="{Binding ConfirmCommand}" /></StackLayout></ContentPage>
実行すると、以下のようになります。
まず、DisplayAlertの場合。
DisplayActionSheetの場合