用户登录后,我需要将数据传递到主页。我需要将用户名传递到主页。
public void Login(string Username, string password)
{
// ..... Do login and if success
var Logindata = database.GetUsername(_usernamelogin);
Application.Current.MainPage.Navigation.PushAsync(new Homepage(Logindata));
}
我获取用户名的方法是
public Register_person GetUsername(string mail1)
{
return Conn.Table<Register_person>().FirstOrDefault(t => t.UserName == mail1);
}
我的主页XAML
在CS后面的主页代码中,我检索到传入的数据
public Register_person register_Person;
public Homepage (Register_person loindata)
{
InitializeComponent ();
l1.Text = logindata.UserName;
}
此代码有效,我可以获取用户名。但是我正在使用MVVM,不确定如何在MVVM中实现它。
答案 0 :(得分:1)
完成此操作的纯MVVM方法是抽象化导航并从您的视图模型中调用它(请参阅Prisms navigation service作为参考)。无论如何,实施这样的导航服务可能会有很多陷阱。如果有可能,我建议您将Prism集成到您的解决方案中,并使用完整的MVVM。
但是,存在一种混合方法,该方法更易于实现,但不是纯MVVM。假设您没有注入依赖项,则可以直接在XAML中定义绑定
<?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:local="clr-namespace:App1"
xmlns:generic="clr-namespace:System.Collections.Generic;assembly=netstandard"
x:Class="App1.MainPage"
x:Name="Page">
<ContentPage.BindingContext>
<local:ViewModel />
</ContentPage.BindingContext>
<!-- Your content goes here -->
</ContentPage>
现在,您可以在viewmodel中定义一个命令来登录用户,并定义一个事件来与您的视图进行通信,以表明用户已成功登录(请注意,此代码被简化为 bare最低)
class ViewModel
{
/// <summary>Initializes a new instance of the <see cref="T:System.Object"></see> class.</summary>
public ViewModel()
{
LogInCommand = new Command(OnLogIn);
}
private void OnLogIn()
{
// your login logic shall go here
// your password and user name shall be bound
// via other properties
// Invoke the LoggedIn event with the user name
// of the logged in user.
LoggedIn?.Invoke(userName);
}
public event Action<string> LoggedIn;
public Command LogInCommand { get; }
}
从您的角度来看,您可以订阅LoggedIn
<ContentPage.BindingContext>
<local:ViewModel LoggedIn="ViewModel_OnLoggedIn" />
</ContentPage.BindingContext>
当然,您需要在代码后面的.xaml.cs
文件中使用相应的方法
private void ViewModel_OnLoggedIn(string obj)
{
// navigate the other page here
}
这不是您可以直接插入的解决方案,但应将您指向正确的方向。 请注意,您必须将某些Button
或其他内容绑定到LogInCommand
,以及用户名和密码的属性条目。