Можно ли соединить View и ViewModel, используя декларативный DataContext и шаблон данных?
Цель : я хочу связать виды с одной ViewModel для времени разработки, а другой - во время выполнения.В настоящее время использование декларативного DataContext для виртуальной машины времени разработки и виртуальной машины, указанной в шаблоне данных, для среды выполнения не работает должным образом.
Справочная информация - существует множество способовподключите View и ViewModel, включая следующее:
A.) Декларативно укажите ViewModel DataContext в XAML представления.Этот метод полезен во время разработки с использованием конструктора без параметров для передачи фиктивных данных.
<UserControl.DataContext>
<my: BrowseAssetsViewModel />
</UserControl.DataContext>
B.) Программно укажите ViewModel, View и DataContext .
// …Setup code
BrowseAssetsViewModel viewModel = new BrowseAssetsViewModel(assetRegistry, domains);
BrowseAssetsView view = new BrowseAssetsView();
view.DataContext = viewModel;
Когда подход B используется в сочетании с подходом A, во время выполнения WPF переопределяет стандартный DataContext, указанный в подходе A, с использованием версии ViewModel с параметризованным конструктором, указанным в подходе B.
C.) Определить шаблон данных для ассоциации View-ViewModel Связав View и ViewModel в App.XAML Application.Resources, WPF может подключитьсяправильный View, основанный на типе ViewModel.
<DataTemplate DataType="{x:Type vm: BrowseAssetsViewModel }">
<vw: BrowseAssetsView />
</DataTemplate>
Если свойство ViewModel было привязано к элементу управления ContentPresenter, WPF подключит соответствующий View (на основе типа ViewModel) и поместит его в ContentPresenter.,Это полезно в сценарии «ViewModel-first», где представлена ViewModel, и WPF разрешает и передает правильный View, проверяя тип представленной ViewModel.
Проблема - При использовании этого подхода Cв сочетании с подходом A WPF разрешает корректное представление, но, кажется, затем повторно запрашивает представление, вызывая декларативно указанную ViewModel через конструктор без параметров (подход A), переопределяя существующее свойство ViewModel!
Вопрос - Есть ли способ использовать эти методы (C и A) вместе без случайного перезаписи свойства C ViewModel?