вторник, 29 мая 2012 г.

MVVM (модель-представление-модель представления))

О самом шаблоне можно почитать тут и тут. (Ну и еще много где).
Но иногда нам нужно разделить логику и представление на разные проекты.
Так вот сдесь я выложу клас, с помощью которого можно отвязать вьюв от самых форм.

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;
}



Комментариев нет:

Отправить комментарий