Я создаю WPF
программу с использованием MVVM
Framework, а также Ninject
для Dependancy Injection
.Я создал два проекта: .Net Class Library
Базовый проект для использования с другими .Net
Приложениями и WPF
специальное приложение.
В настоящее время я меняю страницы своего приложения, используя ApplicationViewModel
и Property
CurrentPage
.CurrentPage
- это тип Enum
с именем ApplicationPage
, содержащий различные страницы в моем приложении.В MainWindow моего WPF-приложения находится фрейм, чей Content
равен bound
к CurrentPage Property
и использует конвертер значений для преобразования значения в другое CustomPages
, которое я сделал с помощью статуи switch
, например, так:
if (value is ApplicationPage)
switch ((ApplicationPage)value)
{
case ApplicationPage.PageOne:
return new PageOne();
case ApplicationPage.PageTwo:
return new PageTwo();
default:
throw Exception;
}
}
Я хотел бы использовать Constructor
Injection
для передачи View Models
для этих страниц в Page's
Constructor
в пределах Converter
, используя ViewModels
, которые впревратить Injected
в ApplicationViewModel
класс, вроде как:
case ApplicationPage.PageOne:
return new PageOne(PageOneViewModel);
Моя первая мысль была, есть ли способ сделать CurrentPage
Property
на самом деле конкретным ViewModel
и выполнить switch
, на котором ViewModel
, чтобы Converter
преобразовал ViewModel
в Page
?
Однако Type из CurrentPage
является проблемой, так как его нужно установить на один из ViewModels
, и поэтому он не может принимать значение другого ViewModel
, оставляя васзастрял только с одним ViewModel
Class
для работы.
Мои мысли таковы: есть ли способ перейти от ViewModel
к Converter
?Или я могу установить CurrentPage
на IViewModelFactory
и создать ViewModel
в конвертере с завода?В каком случае, как бы я изменил значение CurrentPage
, чтобы изменить страницу в приложении?
Есть ли способ придерживаться Dependency
Injection
, следуя этой логике, или есть другой способ, и мне нужно переосмыслить свой код для изменения страницы?К сожалению, большинство примеров, которые я видел, попали в так называемый ServiceLocator
анти-шаблон.