Содержание изменения класса 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>




Спасибо!

573   1  

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

    Ничего не найдено.