MVVMの下で反射を利用して動的にViewModelを作成して一例を実現する
3474 ワード
MVVMでは、一般的に、View Modelがアプリケーション全体で1つのインスタンスしかないことを望んでいます.従来の方法は、単一のインスタンスモードで実現することです.
public class ViewModelTest { private ViewModelTest() { }
private static ViewModelTest viewModelInstace;
public static ViewModelTest GetViewModelTestInstace() { if (viewModelInstace == null) { viewModelInstace = new ViewModelTest(); } return viewModelInstace; } }
上記は従来の単一モデルですが、開発時には多くのViewModelがあります.各ViewModelが単一モデルを実現すれば、作業量は間違いなく大きなエンジニアリングです.そこで、ここでは、反射を利用して、コードを実現するための簡単な一般的な方法を提供する.
一:まずAppで.xaml.csの下のOnStartUpイベントは、私たちのView Modelを格納するためにグローバルな辞書セットを宣言します.
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e);
//View Modelグローバルマッピングアプリケーションを作成する.Current.Properties["ViewModelMap"] = new Dictionary
二:反射ダイナミックによるViewModelの作成
public class ViewModelFactory
{
public static object GetViewModel(Type vm_type)
{
Dictionary<string, object> dic = Application.Current.Properties["ViewModelMap"] as Dictionary<string, object>;
if (dic.ContainsKey(vm_type.FullName))
{return dic[vm_type.FullName];
}
else
{object new_vm = Activator.CreateInstance(vm_type);
dic.Add(vm_type.FullName, new_vm);
return new_vm;
}
}
3:ViewにDataContextを指定するときにGetView Modelメソッドを直接呼び出せばよい
public class ViewModelTest
{
private ViewModelTest()
{
}
}
public partial class ViewModelTestWindow : Window
{
public Window()
{
this.InitializeComponent();
this.DataContext = ViewModelFactory.GetViewModel(typeof(ViewModelTest));
}
}