Метод запуска зависит от действия во втором окне - PullRequest
0 голосов
/ 01 ноября 2011

Пожалуйста, может кто-нибудь сказать мне технику, которая будет использоваться для следующего сценария.

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

У меня есть метод, который открывает новое окно с моей формой аутентификации (имя пользователя и пароль).

    private bool userLogin()
    {
        Window loginInterface = new Window()
        {
            Title = "Please Login",
            Content = new login(),
            Height = 282,
            Width = 300,
            ResizeMode = ResizeMode.NoResize,
            WindowStartupLocation = WindowStartupLocation.CenterOwner

        };

        loginInterface.Owner = this;

        loginInterface.ShowDialog();

        return true;

    }

Я вызываю этот метод вот так, по нажатию кнопки:

    private void perform_action(object sender, RoutedEventArgs e)
    {
        if (!userLogin())
        {
            // Failed login, do nothing
        }
        else
        {
            // Authentication successful, perform action
            delete_item();
        }
    }

Окно открывается нормально, но как я могу теперь заставить мой метод возвращать true или false в зависимости от того, что пользователь делает в открытой форме?

Поэтому, когда пользователь нажимает кнопку входа с именем login_button, мой код уже проверяет учетные данные, но мне нужно, чтобы значение 'bool' было отправлено обратно.

Можно ли заставить мое первое окно почти ждать, пока в другом окне будет выполнено действие, и получить ответ обратно?

Ответы [ 3 ]

1 голос
/ 01 ноября 2011

Метод Window.ShowDialog() фактически уже возвращает bool?.Это можно установить в любой точке в пределах Window, установив (например) this.DialogResult = true.Затем вы можете закрыть окно и получить доступ к значению из вызывающего кода.

Чтобы закрыть окно с результатом:

this.DialogResult = true;

... и затем использовать этот результат в вызовекод:

var myWindow = /*create window*/;
var result = myWindow.ShowDialog();
if (result == true)
{
     //...
}
0 голосов
/ 01 ноября 2011

userLogin должен возвращать что-то отличное от true.

Я бы сделал что-то вроде этого (на основе показанного кода):

return loginInterface.WasSuccessful;  // you'd have to add this property
0 голосов
/ 01 ноября 2011

Чтобы закрыть экран входа в систему, вы можете установить для DialogResult значение true или false, а ShowDialog возвращает это значение.Для других вещей вы можете создать события во втором окне и подписаться на них в первом.

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