【问题标题】:Navigate from a view model in xamarin forms从 xamarin 表单中的视图模型导航
【发布时间】:2019-06-01 12:36:30
【问题描述】:

我正在尝试从视图模型中以 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

        {




        }
    }
}

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    我在这里找到了答案

    https://forums.xamarin.com/discussion/21822/call-navigation-pushasync-from-viewmodel 但在我的主登录页面上我也有这个。它的作用就像一个委托,允许您从原始调用页面推送视图。

        public Login()
        {
             var vm = new LoginViewModel();
            this.BindingContext = vm;
    
    Password.Completed += (object sender, EventArgs e) =>
    {
         vm.SubmitCommand.Execute(null);
    
    
      };
    }
    

    【讨论】:

      【解决方案2】:

      您还可以使用以下命令从您的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);
      

      【讨论】:

        猜你喜欢
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        相关资源
        最近更新 更多