Содержание изменения класса ContentControl в WPF, используя шаблон MVVM?
Я работаю над проектом, использующим MVVM с WPF, и я нахожусь в трудном положении.
Когда я создаю Button и ContentControl в окне, где кнопка изменяет содержимое ContentControl, это работает нормально.
<Window.Resources>
<me:UserControl1ViewModel x:Key="viewModel" />
</Window.Resources>
<Grid>
<Button Content="Button"
Name="button1"
Command="{Binding Source={StaticResource viewModel}, Path=ClickCommand}" />
<ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />
</Grid>
, но когда я создаю элемент управления UserControl с кнопку и кнопку изменения содержимого ContentControl не работает.
Почему?
<Window.Resources>
<me:UserControl1ViewModel x:Key="viewModel" />
</Window.Resources>
<Grid>
<v:UserControl1 />
<ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />
</Grid>
UserControl, вызывающий изменение содержимого ContentControl
<UserControl.Resources>
<me:UserControl1ViewModel x:Key="viewModelA" />
</UserControl.Resources>
<Grid>
<Button Content="Button"
Name="button1"
Command="{Binding Source={StaticResource viewModelA}, Path=ClickCommand}" />
</Grid>
Спасибо!
1 ответ:
Простой ответ заключается в том, что во втором примере вы привязаны к двум различным моделям представления.
<Window.Resources> <!-- View Model Instance #0 --> <me:UserControl1ViewModel x:Key="viewModel" /> </Window.Resources> <UserControl.Resources> <!-- View Model Instance #1 --> <me:UserControl1ViewModel x:Key="viewModelA" /> </UserControl.Resources>В принципе, ваш UserControl и окно не используют один и тот же экземпляр модели представления, поэтому обновления не распространяются. Вам нужно будет получить тот же экземпляр в свой пользовательский элемент управления.
Как насчет:
<!-- Window --> <v:UserControl1 DataContext="{Binding Source={StaticResource viewModel}}" /> <!-- UserControl1 --> <Button Content="Button" Name="button1" Command="{Binding Path=ClickCommand}" />
Comments