В моем проекте у меня есть окно AccountWindow.xaml, в котором есть ContentControl для отображения двух пользовательских элементов управления.
AccountWindow
<Window>
<Window.Resources>
<!-- Login User Control Template -->
<DataTemplate x:Name="LoginUserControl" DataType="{x:Type ViewModels:LoginViewModel}">
<AccountViews:LoginUserControl DataContext="{Binding}"/>
</DataTemplate>
<!-- Registration User Control Template -->
<DataTemplate x:Name="RegistrationUserControl" DataType="{x:Type ViewModels:RegistrationViewModel}">
<AccountViews:RegistrationUserControl DataContext="{Binding}" />
</DataTemplate>
</Window.Resources>
<Grid>
<!-- ContentControl that displays the two User Controls -->
<ContentControl Content="{Binding}" />
</Grid>
</Window>
У меня есть два пользовательских элемента управления, называемые LoginUserControl и RegistrationUserControl
Контроль пользователя входа в систему
<Grid Background="Pink">
<Button Content="Switch To Register View" Command="{Binding SwitchToReg}" Margin="100" />
</Grid>
Регистрация элемента управления пользователя
<Grid Background="Orange">
<Button Content="Press Me" Command="{Binding PressMe}" Margin="100" />
</Grid>
И пользовательский элемент управления Login, и пользовательский элемент управления Registration имеют свои собственные модели ViewModel с внутренней командой RelayCommand, которая привязана к кнопкам, как показано в коде.
Войти Просмотр модели
public class LoginViewModel
{
public RelayCommand SwitchToReg
{
get
{
return new RelayCommand(param =>
{
Console.WriteLine("Switch To Reg");
// Somehow change the content control in the AccountWindow to show the RegistrationDataTemplate???
});
}
}
}
Проблема
Я хочу иметь возможность изменять содержимое ContentControl в AccountWindow, когда пользователь нажимает одну из кнопок в UserControls. Например, когда пользователь нажимает кнопку в пользовательском элементе управления Login, называемую «Переключение в представление реестра», он выполняет команду SwitchToReg и изменяет элемент управления содержимым на RegistrationUserControl & его ViewModel. Как это могло быть возможно?