【问题标题】:WPF Popup window closed eventWPF 弹出窗口关闭事件
【发布时间】:2021-01-22 12:01:54
【问题描述】:

环境总结: 我的 Visual Studio WPF(非核心)应用程序遇到了障碍。 我创建了 2 个不同的窗口,其中一个是 MainWindow,其中软件通过 Binding 显示 ListBox 中的数据,第二个是一个简单的 Add Data 窗口。

在主窗口中,如果我点击“添加新元素”按钮,它将显示新窗口(主窗口仍然显示在下面),如下所示:

ModifyDetails details = new ModifyDetails(ListViewPositions.SelectedItem as Positions);
            details.Show();

如果我填写完表格,我会按下保存按钮。它将更新数据库,并像这样关闭窗口:

...Database updating...
this.Close();

所以问题是我想在关闭“添加新元素”窗口后刷新我的 ListBox。我可以用 MainWindow 上的按钮刷新它,所以这个过程很好,但我正在寻找一个 Closing 事件,或者让它自动化的东西。

刷新过程:

public void Refresh()
        {
            positions.Clear();
            positions = GetProducts();
            ListViewPositions.ItemsSource = positions;
            ListViewPositions.Items.Refresh();
        }

【问题讨论】:

  • 我认为最好的方法是使用 ObservableCollection 作为 itemSource 以便每当对列表或列表中的项目进行更改时,ListView 都会自动刷新。否则,也许您可​​以将 MainWindow 项作为参数传递给 ModifyDetails,然后在关闭窗口时调用您的刷新方法。我不确定这是否是一个好习惯
  • PopUp.Closed 呢?

标签: wpf events window


【解决方案1】:

使用此代码:

ModifyDetails details = new ModifyDetails(ListViewPositions.SelectedItem as Positions);
details.ShowDialog();
Refresh();

或:

ModifyDetails details = new ModifyDetails(ListViewPositions.SelectedItem as Positions, this);
details.Show();


//get popup window
CurrentWindow _window;
public ModifyDetails(position,window)
{
   _window = window;
}


...database updating...
//this method define a parent Window => public void Refresh(){//do work...}
_window.Refresh();
this.Close();

我再补充一个例子

public partial class Window1 : Window
{
    public Window1()
    {
       InitializeComponent();
    }
    
    private void btnGoWindow2_Click(object sender, RoutedEventArgs e)
    {
        Window2 wnd = new Window2();
        wnd.Show(ListViewPositions.SelectedItem as Positions, this);
    }
    
    public void Refresh()
    {
       //update elements...
    }
}  

public partial class Window2 : Window
{
    Window1 window1;
    int position;
    public Window2(int _position, Window1 _window)
    {
       InitializeComponent();
       window1 = _window;
       position = _position;
    }
    
    //other method ....
    
    private void btnCloseWindow_Click(object sender, RoutedEventArgs e)
    {
        window1.Refresh();
        this.Close();
    }
}        

【讨论】:

  • 非常感谢 meysam asadi!第一个(ShowDialog)运行良好。我不知道我是怎么忘记的,真的。我也尝试了第二个,但是 VS 既找不到 Window 类也找不到我的窗口类的 Refresh 方法。再次感谢您!
  • 我修改了代码让你完全清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多