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) ユーザーを変更するときは、新しいユーザーの詳細に基づいてデータを再ロードできるように、ビューモデルが受信する「NewUser」イベントを Messenger にブロードキャストさせます。

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