У меня есть окно (MainWindow.xaml), в котором есть ViewModel (MainWindowViewModel.cs). У меня также есть UserControl с именем MyUserControl.xaml, который также имеет соответствующий ViewModel (MyUserControlViewModel.cs).
Я вставил два экземпляра UserControl в MainWindow:
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject"
Title="My Window">
<Grid>
<local:MyUserControl Visibility="{Binding Path=MyUserControl1Visibility, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<local:MyUserControl Visibility="{Binding Path=MyUserControl2Visibility, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>
В CodeBehind MainWindow я установил DataContext окна в экземпляр ViewModel:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
MainWindowViewModel имеет свойства Visibility, с которыми связаны экземпляры MyUserControl. Они оба выглядят так:
private Visibility _myUserControl1Visibility = Visibility.Collapsed;
public Visibility MyUserControl1Visibility
{
get
{
return _myUserControl1Visibility;
}
private set
{
if (value != _myUserControl1Visibility)
{
_myUserControl1Visibility = value;
OnPropertyChanged("MyUserControl1Visibility");
}
}
}
Кроме того, MainWindow и MainWindowViewModel имеют кнопки и команды, позволяющие пользователю переключаться между двумя экземплярами MyUserControl. То есть только один из них показан в любое время.
Это работало нормально ... пока пользовательские элементы управления не получили свои собственные модели представления. Теперь среда выполнения пытается найти связанные VisibilityProperties (MyUserControl1Visibility…) в ViewModels UserControls вместо ViewModel в MainWindow.
Как заставить эти привязки перейти к MainWindowViewModel вместо соответствующих ViewModel экземпляров UserControl?