如何使用MVVM Light Windows Phone 7刷新我的应用程序中访问的页面的数据

本文关键字:访问 应用程序 数据 我的 刷新 MVVM 何使用 Light Windows Phone | 更新日期: 2023-09-27 18:26:43

我在使用MVVM Light的Windows Phone 7上有几个应用程序页面,当我登录应用程序命令以调用必要的服务并将我返回到登录页面时,就在那里用数据(用户名和密码)启动会话,当我进入时,在数据之前绑定的用户后面的页面中,并且不更新新数据,我有绑定属性和raisePropertyChanged。如何再次初始化数据并再次填充。

谢谢。

这是我在ViewModel:中的代码示例

public class LoginViewModel:ViewModelBase
{
ILoginService _loginService;
INavigationService _navigationService;
private string _usuario;
public string Usuario
{
  get { return _usuario; }
  set { if (_usuario != value) { _usuario = value; RaisePropertyChanged("Usuario"); } }
}
private string _contraseña;
public string Contraseña
{
  get { return _contraseña; }
  set { if (_contraseña != value) { _contraseña = value; RaisePropertyChanged("Contraseña"); } }
}
public LoginViewModel(ILoginService loginService, INavigationService navigationService)
{
 //my code....
}
}

以及我的视图中的代码XAML:

<TextBlock Grid.Row="1" Text="Usuario" Style="{StaticResource TextosEtiquetasLogin}"/>
<TextBox Grid.Row="2" Text="{Binding Usuario, Mode=TwoWay}" Style="{StaticResource CuadrosTexto}" />
<TextBlock Grid.Row="3" Text="Contraseña" Style="{StaticResource TextosEtiquetasLogin}"/>
<PasswordBox x:Name="txtPass" Grid.Row="4" Password="{Binding Contraseña, Mode=TwoWay}" Style="{StaticResource CuadrosTextoPass}">

谢谢,我希望你能帮助我…

如何使用MVVM Light Windows Phone 7刷新我的应用程序中访问的页面的数据

如果您使用的是SimpleIoc,那么它默认情况下会将所有已解析的类视为singleton,包括您的视图模型。

实际情况是,当您更改用户时,SimpleIOC不会在新用户转到页面时为其解析新的视图模型,而是重新使用包含前一用户数据的视图模型。

您有两个选项:

1) 解析视图模型,以便每次解析时都能获得视图模型的新实例:

SimpleIoc.Default.GetInstance<MyViewModel>(Guid.NewGuid().ToString());

2) 当您更改用户时,让Messenger广播您的视图模型接收到的"NewUser"事件,以便他们可以根据新用户详细信息重新加载数据:

在LoginViewModel中:

private void LoginSuccessful()
{
   Messenger.Default.Send<NewUserNotification>(new NewUserNotification("new user name"));
}

在其他视图模型中:

public class MyViewModel:ViewModelBase
{
    public MyViewModel()
    {
        Messenger.Default.Register<NewUserNotification>(ReceiveAction);
    }
    private void ReceiveAction(NewUserNotification user)
    {
        ReloadMyData(user);
    }
}