触发方法取决于第二窗口上的操作

时间:2011-11-01 17:14:10

标签: c# wpf methods window

对于以下情况,请有人告诉我将使用的技术。

在我允许代码执行其他操作之前,我想对用户进行身份验证。

我有一个方法可以打开一个包含我的身份验证表单(用户名和密码)的新窗口。

    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 个答案:

答案 0 :(得分:1)

Window.ShowDialog()方法实际上已经返回bool?。这可以通过设置(例如)Windowthis.DialogResult = true内的任何位置设置。然后,您可以关闭窗口并从调用代码中访问该值。

关闭窗口并显示结果:

this.DialogResult = true;

...然后在调用代码中使用该结果:

var myWindow = /*create window*/;
var result = myWindow.ShowDialog();
if (result == true)
{
     //...
}

答案 1 :(得分:0)

要关闭登录屏幕,您可以将DialogResult设置为true或false,ShowDialog将返回此值。对于其他事情,您可以在第二个窗口创建events并在第一个窗口订阅它们。

答案 2 :(得分:0)

userLogin应该返回非真实的内容。

我会做这样的事情(基于显示的代码):

return loginInterface.WasSuccessful;  // you'd have to add this property