You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中双击Window2的DataGrid将选中值传递至主窗口的实现方案

实现WPF窗口间选中数据传递的方案

以下是基于你提供的代码修改后的具体实现步骤:

1. 调整Window2的代码

给Window2添加一个公共属性来存储用户选中的数据,同时简化双击事件的逻辑:

public class Window2 : Window
{
    // 新增公共属性,用于存储选中的用户数据
    public User SelectedUser { get; private set; }

    // 构造函数,接收要展示的数据源
    public Window2(IEnumerable<User> dataToRetrieve)
    {
        InitializeComponent();
        // 给DataGrid绑定数据源(假设你的DataGrid控件名为dataGrid)
        dataGrid.ItemsSource = dataToRetrieve;
    }

    private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        // 直接获取选中的User对象(如果DataGrid绑定的是强类型User集合)
        if (sender is DataGrid grid && grid.SelectedItem is User selectedUser)
        {
            SelectedUser = selectedUser;
            // 关闭当前窗口
            this.Close();
        }
    }
}

注意:如果你的DataGrid绑定的是DataTable而非直接的User集合,才需要使用DataRowView转换;若绑定的是ObservableCollection<User>这类强类型集合,直接转换SelectedItem即可,无需通过DataGridRow获取。

2. 修改主窗口的按钮点击事件

在ShowDialog()调用完成后,直接读取Window2的公共属性,将数据填充到文本框:

// 修正事件参数:按钮点击事件的参数应为RoutedEventArgs而非KeyEventArgs
private void Button_Click(object sender, RoutedEventArgs e)
{
    Window2 window = new Window2(DataToRetrieve);
    window.ShowDialog();
    
    // 读取选中数据并填充文本框
    if (window.SelectedUser != null)
    {
        firstNameTextBox.Text = window.SelectedUser.FirstName;
        lastNameTextBox.Text = window.SelectedUser.LastName;
    }
}

可选方案:通过自定义事件传递数据

如果不想使用公共属性,也可以通过自定义事件实现数据传递:

  1. 在Window2中定义自定义事件:
public class Window2 : Window
{
    // 定义自定义事件,用于传递选中的User数据
    public event EventHandler<User> UserSelected;

    public Window2(IEnumerable<User> dataToRetrieve)
    {
        InitializeComponent();
        dataGrid.ItemsSource = dataToRetrieve;
    }

    private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (sender is DataGrid grid && grid.SelectedItem is User selectedUser)
        {
            // 触发事件传递数据
            UserSelected?.Invoke(this, selectedUser);
            this.Close();
        }
    }
}
  1. 主窗口订阅事件并接收数据:
private void Button_Click(object sender, RoutedEventArgs e)
{
    Window2 window = new Window2(DataToRetrieve);
    // 订阅自定义事件
    window.UserSelected += Window2_UserSelected;
    window.ShowDialog();
}

private void Window2_UserSelected(object sender, User selectedUser)
{
    firstNameTextBox.Text = selectedUser.FirstName;
    lastNameTextBox.Text = selectedUser.LastName;
}

内容的提问来源于stack exchange,提问作者ISeeMangos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:25:10