如何在 MVVM Light 中调用另一个视图模型构造函数
How to call another view models constructor in MVVM Light
我有一个验证用户登录的方法。如果用户正确登录,我想调用两个视图模型构造函数,以防用户登录。下面是我的示例代码。实现此目标的最佳方法是什么?
发送视图模型:
if (UserName == userName && Password == password)
{
ProjectManager.Instance.IsAdmin = true;
isLoggedIn = true;
IsLoggedIn = true;
ValidLoginImage();
LoginStatus = "Admin Logged In";
MessengerInstance.Send(true);
}
接收视图模型:
private void RegisterForMessages()
{
MessengerInstance.Register<bool>(this, UpdateEnabled);
}
private void UpdateEnabled(bool b)
{
IsLoggedIn = b;
}
registerformessage 方法永远不会被调用。
由于您已经在使用 MvvmLight,我将发送一条包含布尔值的消息,该布尔值调用视图模型中的方法来更新它。在需要更新的视图模型中注册消息。然后它将等待 "ok i'm logged in" 布尔值,然后 运行 一些更新 IsEnabled 属性 的方法。把它放在需要更新的视图模型中:
/// <summary>
/// Listen for messages from other ViewModels
/// </summary>
private void RegisterForMessages()
{
MessengerInstance.Register<bool>(this, UpdateMyStuff);
}
private void UpdateMyStuff(bool b)
{
IsEnabled=b;
}
然后在用户登录时发送消息:
//登录成功代码在这里...
MessengerInstance.Send(true); //or your IsLoggedIn property
如果此视图有注销或其他情况,您可以发送 false。
这将使您的视图模型知道用户是否登录的状态,并允许您进行相应的更新。显然,您需要确保实现 INotifyPropertyChanged 等。这已经是 MVVMLight 的全部内容。如果您的视图模型实现了 MvvmLight 的 ViewModelBase,它已经为您准备好了。
我有一个验证用户登录的方法。如果用户正确登录,我想调用两个视图模型构造函数,以防用户登录。下面是我的示例代码。实现此目标的最佳方法是什么?
发送视图模型:
if (UserName == userName && Password == password)
{
ProjectManager.Instance.IsAdmin = true;
isLoggedIn = true;
IsLoggedIn = true;
ValidLoginImage();
LoginStatus = "Admin Logged In";
MessengerInstance.Send(true);
}
接收视图模型:
private void RegisterForMessages()
{
MessengerInstance.Register<bool>(this, UpdateEnabled);
}
private void UpdateEnabled(bool b)
{
IsLoggedIn = b;
}
registerformessage 方法永远不会被调用。
由于您已经在使用 MvvmLight,我将发送一条包含布尔值的消息,该布尔值调用视图模型中的方法来更新它。在需要更新的视图模型中注册消息。然后它将等待 "ok i'm logged in" 布尔值,然后 运行 一些更新 IsEnabled 属性 的方法。把它放在需要更新的视图模型中:
/// <summary>
/// Listen for messages from other ViewModels
/// </summary>
private void RegisterForMessages()
{
MessengerInstance.Register<bool>(this, UpdateMyStuff);
}
private void UpdateMyStuff(bool b)
{
IsEnabled=b;
}
然后在用户登录时发送消息:
//登录成功代码在这里...
MessengerInstance.Send(true); //or your IsLoggedIn property
如果此视图有注销或其他情况,您可以发送 false。
这将使您的视图模型知道用户是否登录的状态,并允许您进行相应的更新。显然,您需要确保实现 INotifyPropertyChanged 等。这已经是 MVVMLight 的全部内容。如果您的视图模型实现了 MvvmLight 的 ViewModelBase,它已经为您准备好了。