基本的な処理ができるViewModelのベースを作成します。
ViewModel側でViewの表示及び終了が可能になります。
BaseBindableModelを継承してBaseViewModelの殻を作成します。
BaseBindableModelは別記事『Viewとバインドするモデルのベースを作成する。』を参照
public abstract class BaseViewModel : BaseBindableModel
{
}
{
}
ShowDialogメソッドを追加します。
別記事『ViewModelからViewを表示する』を参照
画面終了メソッドを追加します。
protected void CloseWindow()
{
// ViewModelからViewを生成する
public IVewResult ShowDialog(T viewModel)
{
// アクティブなWindowを取得します。
var view = Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
view.Close();
}
}
{
// ViewModelからViewを生成する
public IVewResult ShowDialog(T viewModel)
{
// アクティブなWindowを取得します。
var view = Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
view.Close();
}
}
使用例
public sealed class MainViewModel : BaseViewModel
{
// サブ画面表示メソッド
public void ShowSubWindow(string para)
{
// サブ画面のViewModelを作成する
using (var vm = new SubViewModel(para))
{
// サブ画面ViewModelを元にViewを表示する
var ret = base.ShowDialog(vm);
// 自画面を終了する
base.CloseWindow();
}
}
}
{
// サブ画面表示メソッド
public void ShowSubWindow(string para)
{
// サブ画面のViewModelを作成する
using (var vm = new SubViewModel(para))
{
// サブ画面ViewModelを元にViewを表示する
var ret = base.ShowDialog(vm);
// 自画面を終了する
base.CloseWindow();
}
}
}
上記のメリットは画面表示後の処理をViewModelで連続して処理を行うことができます。