C# WPF 从UserControl调用方法无法刷新MainWindow界面问题求助
问题核心原因
你代码中MainWindow V = new MainWindow()是创建了一个全新的、不可见的主窗口实例,调用该实例的LoadCollection方法不会对当前用户可见的已启动主窗口产生任何影响,所以界面不会刷新。
解决步骤
- 调整执行顺序:必须先完成新图片的文件复制操作,再执行主窗口的刷新逻辑,否则刷新时读不到新增的图片文件
- 调用当前正在运行的主窗口实例的刷新方法,不要新建实例
- 确认
LoadCollection方法内部逻辑,是否包含先清空StackPanel原有子元素、再重新生成所有Item控件的步骤,如果缺少清空逻辑,原有控件自然不会消失
修正后的代码示例
public partial class fileUpload : UserControl { public fileUpload() { InitializeComponent(); } string PathSource = @"SOURCE"; string PathToCopy = @"DESTINATION"; private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { PathSource = FU_source.Text; if (!FU_fileName.Text.Contains(".")) { // 先执行文件复制 File.Copy(PathSource,PathToCopy + FU_fileName.Text + ".png", true); // 获取当前运行的主窗口实例,而非新建实例 MainWindow currentMainWindow = (MainWindow)Application.Current.MainWindow; // 调用现有主窗口的刷新方法 currentMainWindow.LoadCollection(); // 移除当前预览项 ((ItemsControl)this.Parent).Items.Remove(this); } else { MessageBox.Show("ERR TEST", "ERR TEST HEADER"); } } }
补充:如果你的
LoadCollection方法目前没有清空原有元素的逻辑,需要在该方法开头添加你的StackPanel名称.Children.Clear()代码,将你的StackPanel名称替换为主窗口中存放Item的StackPanel的实际命名即可。
内容的提问来源于stack exchange,提问作者Reddi3n
相关产品推荐
相关产品推荐

