О самом шаблоне можно почитать тут и тут. (Ну и еще много где).
Но иногда нам нужно разделить логику и представление на разные проекты.
Так вот сдесь я выложу клас, с помощью которого можно отвязать вьюв от самых форм.
1. Проект с представлениями доолжен оканчиваться на ViewModel
2. Проект с самими XAML должен оканчиваться на WPF.
public static bool? ShowWindowAsDialog(object viewModel, Hashtable param = null)
{
Window view = GetView(viewModel, param);
view.WindowStartupLocation = WindowStartupLocation.CenterScreen;
return view.ShowDialog();
}
///Получаем наше View
private static Window GetView(object viewModel, Hashtable param = null)
{
Type viewType = viewModel.GetType();
string viewName = viewType.Name.Replace("ViewModel", String.Empty);
string[] assemblyNameParts = viewType.Assembly.FullName.Split(new char[] { ',' });
string assemblyName = assemblyNameParts[0].Replace("ViewModel", "Wpf" );
Assembly assembly = Assembly.Load(assemblyName);
Window view = null;
if (param == null)
{
view = (Window)System.Activator.CreateInstance(assembly.GetType(String.Concat(assemblyName, ".", viewName)), new object[] { viewModel });
}
else
{
view = (Window)System.Activator.CreateInstance(assembly.GetType(String.Concat(assemblyName, ".", viewName)), new object[] { viewModel, param });
}
if (view == null)
throw new Exception(String.Format("Cannot show window {0}", viewName));
ElementHost.EnableModelessKeyboardInterop(view);
return view;
}
Но иногда нам нужно разделить логику и представление на разные проекты.
Так вот сдесь я выложу клас, с помощью которого можно отвязать вьюв от самых форм.
1. Проект с представлениями доолжен оканчиваться на ViewModel
2. Проект с самими XAML должен оканчиваться на WPF.
public static bool? ShowWindowAsDialog(object viewModel, Hashtable param = null)
{
Window view = GetView(viewModel, param);
view.WindowStartupLocation = WindowStartupLocation.CenterScreen;
return view.ShowDialog();
}
///Получаем наше View
private static Window GetView(object viewModel, Hashtable param = null)
{
Type viewType = viewModel.GetType();
string viewName = viewType.Name.Replace("ViewModel", String.Empty);
string[] assemblyNameParts = viewType.Assembly.FullName.Split(new char[] { ',' });
string assemblyName = assemblyNameParts[0].Replace("ViewModel", "Wpf" );
Assembly assembly = Assembly.Load(assemblyName);
Window view = null;
if (param == null)
{
view = (Window)System.Activator.CreateInstance(assembly.GetType(String.Concat(assemblyName, ".", viewName)), new object[] { viewModel });
}
else
{
view = (Window)System.Activator.CreateInstance(assembly.GetType(String.Concat(assemblyName, ".", viewName)), new object[] { viewModel, param });
}
if (view == null)
throw new Exception(String.Format("Cannot show window {0}", viewName));
ElementHost.EnableModelessKeyboardInterop(view);
return view;
}
Комментариев нет:
Отправить комментарий