wpf 窗口传递参数

我发现网上很多的的传递参数的方法都极其的麻烦,什么事件,重写,注册,继承,根本用不了这么麻烦。

对于使用window.ShowDialog()方法的

对于使用window.ShowDialog();来弹出窗口的,该方法是有bool返回值的,可以通过这一点来获得子窗口的参数。

//在子窗口通过如下方式设置返回值
this.DialogResult = true;
//在主窗口通过如下方式获得子窗口的返回值
bool? result= window.ShowDialog();
//bool?类型的数值可以是ture,false,null三种。

不过上面这种方法只能传递bool参数,至于其它复杂参数,可以直接放到子窗口类里面,然后在主窗口直接获取。
这里是获取子窗口中的自定义参数obj,将obj直接放到子窗口的class中,设置权限public,就可以在主窗口直接获取到相应的参数。

Window window = new Window();
window.ShowDialog();
//直接获取子窗口中的数据
object obj = window.obj;

对于使用window.Show()方法的

这个就比较麻烦了,需要使用委托来传递参数,其代码如下:

这是主窗口的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    //当页面加载完成后执行
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        bool isFrist = bool.Parse(ConfigurationManager.AppSettings["isFirst"]);
        Confirm confirm = new Confirm(resultOfConfirm);
        confirm.ShowDialog();
    }
    //弹窗传递的消息
    bool confirmResult;
    private void resultOfConfirm(bool result)
    {
        this.confirmResult = result;
    }

弹窗中的代码:

public partial class Confirm : Window
{
    public Confirm(resultOfConfirm result)
    {
        InitializeComponent();
        this.result = result;
    }
    public delegate void resultOfConfirm(bool result);
    private resultOfConfirm result;
    private void Yes_Click(object sender, RoutedEventArgs e)
    {
        result(true);
        this.Close();
    }
    private void No_Click(object sender, RoutedEventArgs e)
    {
        result(false);
        this.Close();
    }
}

版权声明:本文为weixin_44927769原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。