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

C# WPF 从UserControl调用方法无法刷新MainWindow界面问题求助

问题核心原因

你代码中MainWindow V = new MainWindow()是创建了一个全新的、不可见的主窗口实例,调用该实例的LoadCollection方法不会对当前用户可见的已启动主窗口产生任何影响,所以界面不会刷新。

解决步骤

  1. 调整执行顺序:必须先完成新图片的文件复制操作,再执行主窗口的刷新逻辑,否则刷新时读不到新增的图片文件
  2. 调用当前正在运行的主窗口实例的刷新方法,不要新建实例
  3. 确认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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:01