【问题标题】:How to get data from child window in WPF?如何从 WPF 中的子窗口获取数据?
【发布时间】:2015-12-01 10:03:18
【问题描述】:

我有一个 WPF 应用程序,我在其中创建了一个表示自定义消息框的新窗口。它有两个按钮 - 是和否。

我从父表单调用它并希望收到答案,应该是"Yes""No",或truefalse

我正在尝试做与Servy 相同的操作:C# - Return variable from child window to parent window in WPF

但由于某种原因,我从来没有得到更新的值,所以isAllowed 总是假的。

这是我的父窗口中的代码:

bool isAllowed = false;

ChildMessageBox cmb = new ChildMessageBox();
cmb.Owner = this;
cmb.Allowed += value => isAllowed = value;
cmb.ShowDialog();

if (isAllowed) // it is always false
{
    // do something here
}

然后在子窗口中我有:

public event Action<bool> Allowed;

public ChildMessageBox()
{
     InitializeComponent();
}

private void no_button_Click(object sender, RoutedEventArgs e)
{
     Allowed(false);
     this.Close();
}

private void yes_button_Click(object sender, RoutedEventArgs e)
{
     Allowed(true); // This is called when the Yes button is pressed
     this.Close();
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    在您的按钮单击事件处理程序中,您首先需要设置DialogResult 属性。像这样:

    private void no_button_Click(object sender, RoutedEventArgs e)
    {
        DialogResult = false;
        Close();
    }
    
    //Do the same for the yes button (set DialogResult to true)
    ...
    

    这将从ShowDialog 方法返回,您可以简单地将isAllowed 变量分配给ShowDialog 的结果。

    bool? isAllowed = false;
    ...
    isAllowed = cmb.ShowDialog();
    
    if (isAllowed == true)
    {
        ...
    

    【讨论】:

    • 所以这基本上意味着 Child 窗口中的Action 不是必须的,对吗?
    • 值得注意的是DialogResult是默认false,所以设置false可能被认为是不必要的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2012-05-04
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多