c#中子窗口刷新父窗口

private void DishList_Load(object sender, EventArgs e)
{
    
// TODO: 这行代码将数据加载到表“customerDataSet.T_Dish”中。您可以根据需要移动或移除它。
    this.t_DishTableAdapter.Fill(this.customerDataSet.T_Dish);
}


/// <summary>
/// 双击行内任意一个地方打开编辑窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    DishEdit NewForm 
= new DishEdit();//子窗口

    NewForm.id = Int32.Parse(this.dataGridView1.CurrentRow.Cells[0].Value.ToString());
    NewForm.ShowDialog();
//关闭子窗口时不管需要父窗口发生任何动作都必须写在这句话之后 
    this.t_DishTableAdapter.Fill(this.customerDataSet.T_Dish);//父窗口datagridview_1重新装载 
}

将父窗体作为参数传给子窗体,在子窗体关闭时,重新加载父窗体的datagradeview应该就可以了。
 
父窗口:Technology.cs 
子窗口:TechnologyInfo.cs  
 //父窗口数据刷新方法  
public void Refresh_TechnologyDgv() 
{      
//数据绑定 
}    
//弹出子窗口  
TechnologyInfo techInfo = new TechnologyInfo(); 
techInfo.Owner = this;
//指定子窗口的所有者是父窗口  
techInfo.ShowDialog(); 
//弹出子窗口,到子窗口关闭,父窗口处于不可操作状态   
//子窗口弹出消息框  MessageBox.Show("操作成功!!!"); 
 this.DialogResult = DialogResult.OK;//点击确定关闭子窗口 
Technology tech; 
 tech = (Technology)this.Owner;  tech.Refresh_TechnologyDgv();//调用方法刷新父窗口 
### 实现 WPF 中子窗口关闭时触发父窗口的回调函数 为了实现在 `WPF` 应用程序中当窗口关闭时能够通知并更新父窗口的状态,可以采用多种方式。一种常见的方式是通过事件聚合器模式或者直接利用 C# 的委托和事件机制。 #### 使用事件聚合器模式 如果选择使用事件聚合器,则可以在 `MainWindow` 和 `SecondWindow` 之间解耦通信逻辑。这种方式特别适合于大型项目中的松散耦合组件之间的交互[^1]。 ```csharp // 定义一个消息类用于传递信息 public class ResultMessage { public string Message { get; private set; } public ResultMessage(string message){ Message = message; } } // 在 SecondWindow 关闭前发布消息 private void OnClosing(object sender, CancelEventArgs e) { var eventAggregator.Publish(new ResultMessage("Operation completed")); } ``` 在上述代码片段中,在 `SecondWindow` 即将关闭之前会发送一条带有结果的消息给订阅者(即 `MainWindow`),从而实现了从窗体到主窗体的信息反馈。 #### 利用 Show 方法与自定义事件 另一种更简单的方法是在打开模态对话框的时候传入参数,并设置好相应的回调处理程序。这样做的好处是可以让每次弹出相同类型的对话框都能有同的行为响应[^2]。 ```csharp // MainWindow.xaml.cs 文件内的部分代码 var secondWindow = new SecondWindow(); secondWindow.OkEvent += (s, args) => MessageBox.Show($"Result from child window: {args.Message}"); secondWindow.ShowDialog(); // 或者使用带参版本 secondWindow.Show(this, someParameter); ``` 这里展示了如何向 `SecondWindow` 添加一个名为 `OkEvent` 的公共事件,并且在创建实例之后立即注册该事件发生时要执行的动作。一旦点击确认按钮就会触发此动作,进而影响到父级界面的行为。 #### 绑定数据上下文 对于简单的场景来说,也可以考虑直接修改共享的数据模型对象来进行同步操作。比如下面的例就演示了怎样把字符串属性暴露出来供 XAML 页面绑定: ```csharp /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { // 将需要展示的文字作为公开属性提供出去 public string TextValue { get; set; } = "Hello, World!"; public MainWindow(){ InitializeComponent(); // 设置当前实例为自己视图的数据源 DataContext = this; } private void OpenChild_Click(object sender, RoutedEventArgs e){ var childWin = new ChildWindow(); if(childWin.ShowDialog() == true){ // 窗口成功提交后刷新显示内容 TextValue = $"Updated at {DateTime.Now}"; } } } ``` 在这个例里面,每当用户完成了某个特定的操作(例如保存文件),就可以改变 `TextValue` 属性的内容,而无需显式地去触发表单上的任何控件更新其外观;因为已经建立了双向绑定关系所以 UI 自动反映最新的状态变化[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值