C# | WPF Prism 画面遷移メモリ開放
C# WPF Prism の画面遷移時におけるメモリ解放方法
WPF Prism では、Regionという機能で画面遷移します。
ナビゲーションの画面遷移(画面の一部であるRegion部分が切り替わる処理)では、遷移先に INavigaitionAware インターフェースを実装します。
その際に生成される IsNavigationTarget メソッドは、ViewModelインスタンスを使い回すかどうかを 戻り値の bool で判断しますが、return false としてもメモリは開放されません。
【IsNavigationTargetの戻り値
- true : インスタンスを使い回す。次回の画面起動時にコンストラクタが呼ばれない。
- false: インスタンスを使い回さない。次回の画面起動時にコンストラクタが呼ばれる。ただし、メモリは開放されない。
ナビゲーション画面遷移時にメモリを開放する方法
ViewModelにIRegionMemberLifetimeインターフェースを実装し、KeepAliveプロパティの値をfalseにします。
また、INavigationAwareインターフェースも合わせて実装している場合、IsNavigationTarget は Trueにしておきます。
ViewModelへの実装例です。
▼SampleViewModel.cs
public class SampleViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
/// <summary>
/// ViewModel破棄に伴いメモリ開放する際はfalse
/// </summary>
public bool KeepAlive { get; set; } = false;
public SampleViewModel()
{
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
//// RegionMemberLifetime(KeepAlive = false)でViewModelを破棄するため、こちらはTrue
return true;
}
public virtual void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public virtual void OnNavigatedTo(NavigationContext navigationContext)
{
}
}
以上です。
関連コンテンツ
技術の記事をもっと見る →C# | WPF Prism 部分ViewからMainWindowのメソッドを呼び出す方法
WPF Prismでは、部分ViewからMain Windowのメソッドを呼び出すことができます。PrismのイベントAggregatorを使用することで、ViewModel間の直接的な参照を回避し、アプリケーション内で発生するイベントを簡単に処理することができます。
#csharp#wpf#prismC# | WPF Prism MainWindow から ContentRegion の View メソッドを呼び出す方法
WPF Prismでは、主要なウィンドウ(Main Window)とその中に含まれる一連のリージョン(Region)で構成される場合があります。これらのリージョンには、ビュー(View)やビューモデル(ViewModel)が配置され、相互に通信することができます。Main WindowからContent Regionにあるビューやビューモデルのメソッドを呼び出す方法を説明します。
#csharp#wpf#prismC# | WPF Prism 動画(MediaElement)をMVVMパターンで実装する方法
WPF Prism の動画再生(MediaElement.Play())を、MVVM パターンで実装する方法
#csharp#wpf#prism