Я работаю над приложением WPF/MVVM с использованием MVVM Light. Прямо сейчас мой ViewModelLocator
довольно стандартный; он включает конструктор static
, который регистрирует ViewModels через SimpleIoc
и имеет свойства, возвращающие текущие экземпляры ViewModels.Вопросы относительно правильного использования ViewModelLocator в MVVM
Я не знаю, насколько это уместно, но я изучал использование экземпляров ViewModelLocator
в ViewModels для доступа к свойствам других ViewModels и для изменения ContentControl
в одном из моих представлений. Если есть какие-то серьезные проблемы с этим, сообщите мне, чтобы я мог найти способ обойти это. Например, я, возможно, что-то в ViewModel, как:
private ViewModelLocator _viewModelLocator = new ViewModelLocator();
private void SomeMethod()
{
_viewModelLocator.OtherViewModel.SomeProperty = something;
}
В другом ViewModel я следующее:
private ViewModelLocator _viewModelLocator = new ViewModelLocator();
public ViewModelBase CurrentViewModel { get; set; }
private void SomeMethod()
{
CurrentViewModel = _viewModelLocator.SomeViewModel;
}
В этом случае CurrentViewModel
связан с ContentControl
на мой взгляд.
В настоящее время возможность сделать это очень удобно, но я хотел бы получить информацию от более опытных программистов, чтобы убедиться, что я не стреляю в ногу. Если есть проблема с этим, есть ли более приемлемые маршруты, которые я могу предпринять для достижения тех же результатов?
Теперь, если нет ничего плохого с вышеупомянутым подходом, я хотел бы знать, если это будет уместно и/или приемлемым сделать ViewModelLocator
static
. Чтобы попробовать, я быстро перешел на static
ViewModelLocator
. В моей MainWindow.xaml, я установил DataContext
на:
DataContext="{Binding Source={x:Static vm:ViewModelLocator.Main}}"
... и вернуться к первому примеру, я могу использовать:
private void SomeMethod()
{
ViewModelLocator.OtherViewModel.SomeProperty = something;
}
и:
public ViewModelBase CurrentViewModel { get; set; }
private void SomeMethod()
{
CurrentViewModel = ViewModelLocator.SomeViewModel;
}
Прямо сейчас программа работает нормально, используя static
ViewModelLocator
, но она находится в зачаточном состоянии, поэтому я хотел бы знать, является ли это что-то, что может быть жизнеспособным вариантом в будущем, или если я должен держаться подальше от a static
ViewModelLocator
в целом.
Любые консультации по этим вопросам были бы весьма полезными. Я до сих пор довольно новичок в программировании, и я хотел бы изучить методы, которые будут хорошо служить мне в долгосрочной перспективе.
Если нет явных проблем с тем, что я здесь делаю, пожалуйста, дайте мне знать.
Спасибо.