[WPF] あるView/ViewModelから、別のView/ViewModelのメソッドを呼びたいとき
やりたいこと
あるViewModelから、別のViewModelのメソッドをどうしても呼びたいということがあった。
無理やり感があるが、その時に試したやり方をメモ。
サンプル
どちらのView/ViewModelにも属さないシングルトンのクラスを用意して、そこにdelegate(Action)を持たせる。
そこに、呼ばれたい側のViewModelでGetInstanceして、呼ばれたいメソッドを登録する。
その後、呼びたい側のViewModelでGetInstanceして、呼びたいメソッドを呼ぶ。
public sealed class FunctionManager
{
private static FunctionManager _instance = new FunctionManager();
public static FunctionManager GetInstance() => _instance;
private FunctionManager() { }
// 呼びたい/呼ばれたいメソッドを登録するAction
public Action MyFunc = null;
}
class ViewModel : BindingBase
{
FunctionManager fm = FunctionManager.GetInstance();
public ViewModel()
{
fm.MyFunc += (()=>
{
Debug.WriteLine("Func呼びました。");
});
}
}
class ViewModel2 : BindingBase
{
FunctionManager fm = FunctionManager.GetInstance();
public ViewModel2() { }
public void Yobu()
{
fm.MyFunc?.Invoke();
}
}
※これがよいやり方なのかどうかは不明。
DIコンテナを使って、ここでいうところのFunctionManagerクラス
(位置づけ的にはModelか)を、両ViewModelにオブジェクト注入してやれば何となくそれっぽくなるのかも?
※別にViewModel間でなくても、どこからでも呼べてしまいそうなので、変な使い方すると後で大変になりそう。
Author And Source
この問題について([WPF] あるView/ViewModelから、別のView/ViewModelのメソッドを呼びたいとき), 我々は、より多くの情報をここで見つけました https://qiita.com/tera1707/items/375257362edd5f6d5e4f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .