Кнопка Command не закрывает окно - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть два открытых окна.Я пытаюсь быть в состоянии нажать кнопку в одном окне, и это должно закрыть это же окно.Я хочу сделать это с помощью команд кнопки и параметра команды.Метод execute переключает параметры команды, чтобы определить, какая кнопка нажата, и должен соответствующим образом выполнить заданную задачу следующим образом:

public void Execute(object parameter)
    {
        LoginPage loginPage = new LoginPage();
        CreateAccountPage createAccountPage = new CreateAccountPage();
        DepositPage depositPage = new DepositPage();
        WithdrawPage withdrawPage = new WithdrawPage();

        switch (parameter)
        {
            case "LoginPageButton":
                if (viewModel.IsLoggedIn == false)
                loginPage.Show();
                else if (viewModel.IsLoggedIn == true)
                        loginPage.Close();
                break;
            case "CreateAccountPageButton":
                createAccountPage.Show();
                break;
            case "DepositPageButton":
                depositPage.Show();
                break;
            case "WithdrawPageButton":
                withdrawPage.Show();
                break;
            case "ClearOrderButton":
                //code here
                break;
            case "LogoutButton":
                //code here
                break;
            case "FinishLoginButton": // this is where the issue is
                loginPage.Close();//this does not close the loginPage window
                break;
        }
     }

Нет ошибок сборки, и команда выполнит другие задачи, такие как открытие других окон ии т. д., но не закрою окно, поэтому я знаю, что код достигнут, окно просто не закроется, и после нескольких дней исследований я не смог найти ответ.Я могу выполнить желаемую задачу одним нажатием кнопки, например:

private void FinishLogin_Click(object sender, RoutedEventArgs e)
    {
        if ((viewModel.usernameList.Contains(UsernameTextBox.Text) &&
           viewModel.passwordList.Contains(PasswordTextBox.Text)) &&
           (viewModel.usernameList.IndexOf(UsernameTextBox.Text) ==
           (viewModel.passwordList.IndexOf(PasswordTextBox.Text))))
        {
            viewModel.IsLoggedIn = true;
            this.Close();
        }
    }

вместе с будущими задачами, которые мне нужно выполнить, но я не хочу использовать нажатие кнопки, и мне потребуется inotifypropertychangedв будущем мне нужна команда.Это код кнопки, которую нужно нажать, чтобы закрыть окно:

<Button Content="Finish Login" Grid.Column="1" Grid.Row="2"     FontWeight="Bold" Margin="130 10 30 10" Background="Firebrick" Command="{Binding ButtonCommands}" CommandParameter="FinishLoginButton"/>

Я знаю, что большая часть этого кода не будет следовать за MVVM, но я просто хочу, чтобы этот код работал намомент.

1 Ответ

0 голосов
/ 26 сентября 2018

В этом примере вы создаете новый экземпляр LoginPage loginPage = new LoginPage();, а затем закрываете этот конкретный экземпляр.Что вам нужно сделать, это пропустить существующий экземпляр вашего окна и закрыть его.

В вашем коде окна (если вы устанавливаете видовую модель таким образом):

//Pass the current instance of the window to the viewmodel
this.DataContext = new LoginPage(this); 

Затем обновите конструктор вашей модели представления, чтобы взять экземпляр окна

private Window _parent;
public LoginPage(Window Parent)
{
    _parent = Parent;
}

И обновите метод Execute (удалив new LoginPage() и т. Д.)

public void Execute(object parameter)
{
    [....]
    _parent.Close();
    [....]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...