<UserControl.DataContext>
<vm:LightComponentViewModel />
</UserControl.DataContext>
<StackPanel Orientation="Vertical">
<local:ComponentHeader Content="Light" />
<StackPanel Margin="5" Orientation="Horizontal">
<TextBlock Text="Type" />
<ComboBox SelectedItem="{Binding Type}" ItemsSource="{Binding Source={StaticResource DataProviderLight}}" Width="150" />
</StackPanel>
<ContentPresenter Content="{Binding Type}" ContentTemplateSelector="{StaticResource LightComponentsSelector}" />
</StackPanel>
У меня в ContentPresenter подставляется нужный DataTemplate через DataTemplateSelector. В зависимости от выбранного значения в Combobox.
Мне нужно в DataTemplate передать текущий DataContext "LightComponentViewModel".
Это можно сделать передав в свойство Content ContentPresenter'а инстанс LightComponentViewModel.
Но при этом перестает работать смена DataTemplate при изменении значения Combobox.
Как можно это исправить ?
DataContextв XAML это по сути, нарушение MVVM, ибо ваш View вдруг знает и даже более, руководит VM слое. 2. Контролы не должны распыляться на множество разных задач, разных видов и так далее. Вот возьмите к примеруTextBox, он знает что либо про данные? Нет. Он лишь что-то делает на основе своего, без вообще каких либоDataContext, ну а все данные ему задаются через свойства (.Text = ...;). Вот такое должно быть и у вас. – EvgeniyZ Jan 22 '24 at 13:30ContentPresenter), вы хотите сделать контрол, который будет отвечать за отображение страницы. Создаете его, добавляете свойство зависимости которое принимает простойobject, ну или интерфейс страницы, его указываете вContentPresenter, снаружи в ресурсы добавляетеDataTemplate'ы со всеми типами и видами, ну и затем снаружи используете свой контрол как<ns:SuperControl Page = "{Binging CurrentPage}"/>, все, ну и как видите, вообще не трогаетсяDataContext. – EvgeniyZ Jan 22 '24 at 13:34