WPF中如何移除MainGrid的ReminderUR控件并刷新网格信息?
解决WPF MainGrid中ReminderUR控件的移除与刷新问题
问题根源
你之前调用MainGrid.Children.Remove(r)失败,是因为代码里的r是foreach循环内的局部变量——每次循环都会创建一个新的ReminderUR实例并添加到网格,但这个局部的r只在当前循环迭代中有效。后续你试图移除时使用的r,和已经添加到MainGrid里的控件实例根本不是同一个对象,自然无法成功移除。
解决方案:先清理旧控件,再重新加载
要实现网格信息的刷新,需要先移除所有已存在的ReminderUR控件,再重新调用patient_today()添加新数据。
步骤1:编写清理控件的代码
遍历MainGrid的Children集合,筛选出所有ReminderUR类型的控件并移除。注意不能直接在遍历原集合时修改,需要先将目标控件复制到临时列表:
// 清理所有ReminderUR控件 var remindersToRemove = MainGrid.Children.OfType<ReminderUR>().ToList(); foreach (var reminder in remindersToRemove) { MainGrid.Children.Remove(reminder); }
步骤2:重置计数器并重新加载数据
清理完成后,重置计数器a为0,再调用patient_today()重新添加最新的控件:
// 重置计数器 a = 0; // 重新加载今日患者提醒 patient_today();
整合为刷新方法
可以把上述逻辑封装成一个方法,方便调用:
void RefreshPatientReminders() { // 清理旧控件 var remindersToRemove = MainGrid.Children.OfType<ReminderUR>().ToList(); foreach (var reminder in remindersToRemove) { MainGrid.Children.Remove(reminder); } // 重置计数器并重新加载 a = 0; patient_today(); }
之后只要调用RefreshPatientReminders(),就能完成MainGrid中提醒控件的刷新。
内容的提问来源于stack exchange,提问作者Behtash
相关产品推荐
相关产品推荐

