Xamarin.Forms + MVVMLightでダイアログを表示する。
MVVMで、ViewModelからViewを制御して、ダイアログを表示する。
簡単なサンプルを表示する。
XAMLを使っているので、Pageのコードビハインドに、Notificationの受け口を設定
DisplayAlert を使って、ダイアログを表示している。
using GalaSoft.MvvmLight.Messaging;
namespace AskaShop.View {
public partial class LoginPage : ContentPage {
public LoginPage() {
InitializeComponent();
BindingContext = App.Locator.Login;
// Messenger 経由で ViewModel から UI 操作を要求されたとき行う処理を登録しておく。
Messenger.Default.Register<NotificationMessage>(this, this.Alert);
}
public void Alert(NotificationMessage message) {
DisplayAlert("", message.Notification, "OK");
}
}
}
ViewModel側のコード
using GalaSoft.MvvmLight.Messaging;
namespace AskaShop.ViewModel {
public class LoginViewModel : ViewModelBase {
#region local variable
private readonly IWcfServiceWrapper _wcfServiceWrapper;
private bool _isCallingWebservice;
private string _entUserId;
private string _entPassword;
private string _lblBuild;
private string _btnLoginColor;
#endregion
public LoginViewModel(IWcfServiceWrapper wcfServiceWrapper) {
if (wcfServiceWrapper == null) throw new ArgumentNullException("wcfServiceWrapper");
_wcfServiceWrapper = wcfServiceWrapper;
SubmitCommand = new RelayCommand(GetResponseAsync, () => CanGetResponse);
CanGetResponse = true;
IsCallingWebservice = false;
btnLoginColor = "Blue";
lblBuild = "Build 17-01-14/18";
}
private async void GetResponseAsync() {
CanGetResponse = false; //ボタンを無効
IsCallingWebservice = true; //処理中の表示
btnLoginColor = "#1e90ff"; //ボタンの背景色をdodgerblueへ変更
if (_entUserId == null || _entUserId.Trim() == "") {
CanGetResponse = true;
IsCallingWebservice = false;
btnLoginColor = "Blue";
// Messenger 経由で View に DisplayAlert の表示を要求する。
MessengerInstance.Send(new NotificationMessage("ユーザーIDが未入力です。"));
return;
}
if (_entPassword == null || _entPassword.Trim() == "") {
CanGetResponse = true;
IsCallingWebservice = false;
btnLoginColor = "Blue";
// Messenger 経由で View に DisplayAlert の表示を要求する。
MessengerInstance.Send(new NotificationMessage("パスワードが未入力です。"));
return;
}
var vUser = await _wcfServiceWrapper.GetUser_MstAsync(_entUserId, _entPassword);
if (vUser.USERID == null) {
CanGetResponse = true;
IsCallingWebservice = false;
btnLoginColor = "Blue";
// Messenger 経由で View に DisplayAlert の表示を要求する。
MessengerInstance.Send(new NotificationMessage("ユーザーIDもしくは、パスワードが間違っています。"));
return;
}
//global変数の編集
App.UserId = vUser.USERID;
App.UserName = vUser.USER名;
App.得意先Cd = vUser.得意先CD;
App.得意先名 = vUser.得意先名;
App.メールアドレス = vUser.メールアドレス;
App.得意先単価GRP = vUser.得意先単価GRP;
App.カレンダー区分 = vUser.カレンダー区分;
App.事業所Cd = vUser.事業所Cd;
App.営業所Cd = vUser.営業所Cd;
//画面遷移
App.Current.MainPage = new EbiShop.View.MenuPage();
}
}
}
ViewModel側は、 MessengerInstance.Send(new NotificationMessage("パスワードが未入力です。"));
だけでOKだった。
0 件のコメント:
コメントを投稿