Изменить управление содержимым Windows с пользовательского контроля - WPF - PullRequest
0 голосов
/ 10 ноября 2018

В моем проекте у меня есть окно 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. Как это могло быть возможно?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Для этого вам нужно будет передать ссылку на AccountWindow в UserControl, когда вы его создаете, и тогда ваша Команда может обновить ContentControl, используя предоставленную вами ссылку.

Это введение связывания, которого лучше избегать, поэтому вместо этого я бы предложил подумать о дизайне AccountWindow. Я бы использовал строки сетки, чтобы отделить область ContentControl от кнопки, которая изменит UserControl.

Example window

В приведенном выше окне синяя область - это место, где я должен разместить ContentControl, а красная область - часть AccountWindow.

Таким образом, поведение для переключения ContentControl полностью обрабатывается AccountWindow.

0 голосов
/ 10 ноября 2018

Вы можете создать свойство и прикрепить его к элементу управления. Или вы можете создать другой пользовательский элемент управления и сделать его видимым или не контролируемым созданным вами свойством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...