ビュー/ビューモデルの階層を含むアプリケーションがあります。MVVMビューの変更間のデータの永続化
ViewModelBaseが2つのviewmodels
private AViewModel _aViewModel = new AViewModel();
private BViewModel _bViewModel = new AViewModel();
私のXAMLは
private ViewModelBase _currentView {get; set;}
public ViewModelBase CurrentView
{
get
{
return _currentView;
}
set
{
_currentView = value;
RaisePropertyChanged("CurrentView");
}
}
へのDataControlを結合し、DataTemplates
<DataTemplate DataType="{x:Type vm:AViewModel}">
<vw:AView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BViewModel}">
<vw:BView />
</DataTemplate>
このすべてが正常に動作しますが、私に基づいて表示するように表示され決定が含まれていますビューの変更の間にデータを保持する方法がわかりません。 AViewModelには "Test"という文字列が含まれており、AViewには双方向バインディングがあります。 CurrentView = _bviewmodelを使用してビューを変更すると、_aviewmodelに戻ってもデータが保持されません。毎回新しい空のビューモデルを作成するのではなく、ビューの変更間にデータが保持されるようにするにはどうすればよいでしょうか。 _currentViewを_aViewModelに取得してから_currentViewに戻す必要があります
'AViewModel'を処理しておらず、双方向バインディングで' Test'という文字列にバインドしていないので、データはすでに永続化されている必要があります。おそらく、AViewModel.Test'の 'set'メソッドにブレークポイントを追加し、実際に値が設定されていることを確認してください。 'CurrentView'を変更し、' AViewModel.Test'がまだ設定されていることを確認するためにブレークポイントを追加してください。 – Rachel
はrachelに同意しますが、_aViewModelおよび_bViewModelが有効範囲外になっている場合を除き、データはメモリ内に残ります。 – Anton
AViewmodel(Set Test)にブレークポイントを追加しても、ViewModelBaseのCurrentViewには戻されません。値を取り戻すMediatorによってViewModelBaseに値を取得できますが、これもまた次回に失われます。私は "currentView"を設定しました - 毎回新しいビューモデルを作成していますが、単純に参照を渡す方法はわかりません。 – Oli