C# | WPF Prism 部分ViewからMainWindowのメソッドを呼び出す方法
WPF Prismでは、部分ViewからMain Windowのメソッドを呼び出すことができます。PrismのイベントAggregatorを使用することで、ViewModel間の直接的な参照を回避し、アプリケーション内で発生するイベントを簡単に処理することができます。
WPF Prismでは、部分ViewからMain Windowのメソッドを呼び出すことができます。
PrismのイベントAggregatorを使用することで、ViewModel間の直接的な参照を回避し、アプリケーション内で発生するイベントを簡単に処理することができます。
以下は、Aggregatorを使用して、部分ViewからMain WindowのViewModelのメソッドを呼び出す方法の例です。
1. Main WindowのViewModelに、呼び出したいメソッドを作成します。
public class MainWindowViewModel : BindableBase
{
private readonly IEventAggregator _eventAggregator;
public MainWindowViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public void SomeMethod()
{
// Do something
}
}
2. 部分Viewに、イベントAggregatorを注入します。
public class PartialView : UserControl
{
private readonly IEventAggregator _eventAggregator;
public PartialView(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
}
3. 部分View内で、イベントAggregatorを使用してイベントを発行します。
たとえば、以下のように、"SomeEvent"というイベントを発行することができます。
_eventAggregator.GetEvent<SomeEvent>().Publish();
そのままだと、SomeEventクラスが無いためエラーとなります。
そのため、新しいクラスを作成して PubSubEvent を継承したSomeEventクラスを作成します。
public class SomeEvent : PubSubEvent
{
}
補足ですが、パラメータありのイベント用意する場合は、PubSubEventのジェネリック型に定義します。
public class SomeEvent : PubSubEvent<string>
{
}
4. Main WindowのViewModelに、"SomeEvent"を購読するメソッドを作成します。
これにより、イベントが発行されたときに、該当のメソッドが呼び出されます。
public class MainWindowViewModel : BindableBase
{
private readonly IEventAggregator _eventAggregator;
public MainWindowViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<SomeEvent>().Subscribe(OnSomeEvent);
}
public void OnSomeEvent()
{
SomeMethod();
}
public void SomeMethod()
{
// Do something
}
}
これで、部分ViewからMain WindowのViewModelのメソッドを呼び出すことができます。
部分View内でイベントを発行することで、Main WindowのViewModelにイベントを受信するメソッドを作成し、必要な処理を実行することができます。
関連コンテンツ
技術の記事をもっと見る →C# | 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#prismC# | WPF Prism ダイアログ画面内にRegion(ContentControl)を配置する方法
WPF Prismでは、Dialog画面内のContentControlに別のViewを表示させる方法
#csharp#wpf#prism