我正在尝试从视图模型中以Xamrian形式推送视图,但是当用户输入正确的用户名和密码后,它应该能够显示主页,但我似乎无法使其真正发挥作用。
您将看到我有一个on Submit命令,目前这只是模拟数据,所以不要介意此阶段的代码设计会发生变化。
通常我会使用
var stocktakepage = new StockTake();
await Navigation.PushAsync(stocktakepage);
但是模型与类中的导航堆栈无关,这是他们从视图模型导航的另一种方法。
public class LoginViewModel : INotifyPropertyChanged
{
public Action DisplayInvalidLoginPrompt;
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private string email;
public string Email
{
get { return email; }
set
{
email = value;
PropertyChanged(this, new PropertyChangedEventArgs("Email"));
}
}
private string password;
public string Password
{
get { return password; }
set
{
password = value;
PropertyChanged(this, new PropertyChangedEventArgs("Password"));
}
}
public ICommand SubmitCommand { protected set; get; }
public LoginViewModel()
{
SubmitCommand = new Command(OnSubmit);
}
public void OnSubmit()
{
if (email != "handheld1" || password != "test123")
{
DisplayInvalidLoginPrompt();
}else
{
}
}
}
答案 0 :(得分:0)
我在这里找到了答案
而且在我的主要登录页面上,我也有这个。这样做就像代理一样,可让您从原始调用页面中推送视图。
public Login()
{
var vm = new LoginViewModel();
this.BindingContext = vm;
Password.Completed += (object sender, EventArgs e) =>
{
vm.SubmitCommand.Execute(null);
};
}
答案 1 :(得分:0)
您也可以使用以下内容从ViewModel
导航。您可以针对所需的每种页面类型执行此操作。查看以下示例:
await App.Current.MainPage.Navigation.PushAsync(new PageName());
也
await App.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(new PageName()) { BarBackgroundColor = Color.FromHex("#101010"), BarTextColor = Color.White, }, true);