0

我在使用 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}">

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

4

1 回答 1

1

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

发生的情况是,当您更改用户时,SimpleIOC 不会在新用户转到页面时为他们解析新的视图模型,而是重新使用包含来自前一个用户的数据的视图模型。

您有 2 个选项:

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

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

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

在登录视图模型中:

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);
    }
}
于 2013-08-07T09:50:22.453 回答