Динамическое изменение содержимого в окне WPF из UserControl - PullRequest
0 голосов
/ 17 мая 2018

У меня есть два UserControls, например, FirstUserControl и SecondUserControl. Сначала я установил FirstUserControl в MainWindow с помощью <ContentControl x:Name="contentControl" />.

public MainWindow()
{
    InitializeComponent();
    this.contentControl.Content = new LoginControl();
}

Но когда пользователь нажимает кнопку, то, что находится в FirstUserControl ContentControl в MainWindow, должно измениться на SecondUserControl. Но этого не происходит. ContentControl остается FirstUserControl. В чем может быть проблема - я не знаю.

Этот код из FirstUserControl:

private void loginButton_Click(object sender, RoutedEventArgs e)
{
    MainWindow mainWindow = new MainWindow(new CheckInCheckOutControl());
}

И это конструктор из MainWindow, который отвечает за изменение ContentControl:

public MainWindow(ContentControl contentControl)
{
    this.contentControl.Content = contentControl;
}

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

1 Ответ

0 голосов
/ 17 мая 2018

MainWindow mainWindow = new MainWindow(new CheckInCheckOutControl()); создает новый экземпляр MainWindow вместо использования уже открытого MainWindow. не делай этого

MainWindow владеет FirstUserControl и SecondUserControl, поэтому их следует изменять MainWindow, а не FirstUserControl.

создать событие в FirstUserControl

public event EventHandler LoginClick;

private void loginButton_Click(object sender, RoutedEventArgs e)
{
    if (LoginClick != null) LoginClick(this, e);
}

в MainWindow, которому принадлежит экземпляр FirstUserControl, подпишитесь на это событие и измените содержимое:

public MainWindow()
{
    InitializeComponent();
    var loginControl = new LoginControl();

    loginControl.LoginClick += (senser, e) =>
    {
         this.contentControl.Content = new CheckInCheckOutControl();
    }

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