WPF 父窗体向子窗体传值,子窗体如何接收

在 WPF 中,如果父窗体需要向子窗体传值,通常有几种方法可以实现。以下是几种常见的方式:

方法1:通过构造函数传递值

这是最简单和直接的方法。在创建子窗体对象时,可以通过构造函数传递参数。子窗体可以在其构造函数中接收并存储这些参数。

示例代码:

父窗体代码:

cs 复制代码
// 创建子窗体并传递值
string dataToPass = "Hello from Parent";
ChildWindow childWindow = new ChildWindow(dataToPass);
childWindow.Show();

子窗体代码:

cs 复制代码
public partial class ChildWindow : Window
{
    private string receivedData;

    // 子窗体的构造函数,接收从父窗体传递的数据
    public ChildWindow(string data)
    {
        InitializeComponent();
        receivedData = data;

        // 使用接收到的数据,比如在界面上显示
        MessageBox.Show(receivedData);
    }
}

方法2:通过子窗体的公共属性传递值

如果你不想在构造函数中传递参数,还可以在子窗体中定义公共属性,然后父窗体在创建子窗体对象后,设置该属性的值。

示例代码:

父窗体代码:

cs 复制代码
// 创建子窗体
ChildWindow childWindow = new ChildWindow();

// 设置子窗体的公共属性
childWindow.ReceivedData = "Hello from Parent";

// 显示子窗体
childWindow.Show();

子窗体代码:

cs 复制代码
public partial class ChildWindow : Window
{
    // 定义一个公共属性
    public string ReceivedData { get; set; }

    public ChildWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // 使用接收到的数据
        MessageBox.Show(ReceivedData);
    }
}

方法3:通过事件传递值

如果你需要在子窗体中进行操作后,返回一些结果到父窗体,可以使用事件机制。通过在子窗体中定义一个事件,当子窗体完成操作时触发事件,父窗体订阅这个事件并接收结果。

示例代码:

子窗体代码:

cs 复制代码
public partial class ChildWindow : Window
{
    // 定义一个事件,用于通知父窗体
    public event Action<string> OnDataSent;

    public ChildWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // 触发事件并传递数据
        OnDataSent?.Invoke("Data from Child Window");

        // 关闭窗体
        this.Close();
    }
}

父窗体代码:

cs 复制代码
// 创建子窗体
ChildWindow childWindow = new ChildWindow();

// 订阅子窗体的事件
childWindow.OnDataSent += (data) =>
{
    // 处理子窗体传递回来的数据
    MessageBox.Show(data);
};

// 显示子窗体
childWindow.Show();

总结

  • 构造函数传值:适用于在子窗体初始化时即需使用的数据。
  • 公共属性传值:适用于初始化后需设置的数据。
  • 事件传值:适用于子窗体操作后将结果传递回父窗体的场景。

根据具体的需求和应用场景,选择适合的方法来实现父窗体和子窗体之间的传值。

相关推荐
hez20101 天前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉7 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫8 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫9 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6259 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902119 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠10 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫12 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech12 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf14 天前
C#摸鱼实录——IoC与DI案例详解
c#