来自另一个 window 的 C# WPF 刷新列表框

C# WPF refresh listbox from another window

我正在制作一个基于 Access 数据库的 WPF 项目。 数据库有两个表:

  • tblMovies (MovieID: PK, Title, Director, Genre etc)
  • tblActors (ActorID: PK, MovieID: FK, Firstname, Lastname etc)

我有一个列表框,我可以在其中查看所有电影,如果我点击其中一部电影,它会显示一个新的 window,其中包含关于该电影的所有详细信息:片名、导演、类型,还有演员。

在这个 window 中,我添加了一个按钮来创建一个新演员。这将打开一个新的 window,您可以在其中输入 MovieID (FK) 和有关演员的信息。 当我单击保存更改时,它起作用并且 window 关闭,但是我的 listboxActors 需要手动刷新(我为此添加了一个按钮)才能看到新演员。

在我的另一个 window 中单击 "save changes" 后,有没有办法刷新我的 listboxActor?

我首先通过点击添加新演员时关闭我的第一个屏幕来做到这一点,然后如果我保存它会重新打开屏幕,它会自动刷新,但我不希望那样。

我的列表框演员:

        listBoxActors.ItemsSource = mov.Actors;

保存按钮(在另一个屏幕中)

    private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
        {
            Actor act = new Actor();
            act.MovieID = Convert.ToInt32(textBoxMovieID.Text);
            act.FirstName = textBoxFirstName.Text;
            act.LastName = textBoxLastName.Text;
            act.Country = textBoxCountry.Text;
            act.Born = Convert.ToDateTime(BornDate.SelectedDate);
            act.Bio = textBoxBio.Text;
            ActorRepository.AddActor(act);
            MessageBox.Show("The actor: " + act.FirstName + " " + act.LastName + " has been created");
            this.Hide();
        }

刷新按钮:

    private void buttonRefresh_Click(object sender, RoutedEventArgs e)
    {
        listBoxActors.ItemsSource = null;
        listBoxActors.ItemsSource = mov.Actors;
    }

提前致谢!

好吧,感谢您的解释性评论...!我有一个建议给你,如果这对你编写场景代码有帮助,请告诉我:

所以你有两个表单 WindowShowDetails 设为 main-form 和 WindowAddActor 设为 child,它们将是打开主表单中的一个按钮child 表单,您正在 child 中执行一些任务,然后按“保存”按钮,这将保存这些详细信息并关闭该表单。并且您想刷新与此事件关联的主窗体中的列表。为此,您可以使用委托和事件;为此,您必须在 main-form 和 child 中执行许多任务,让我告诉您它如何帮助您:

  • 在主窗体中定义一个委托:

    public delegate void RefreshList();
    
  • 定义该委托类型的事件

    public event RefreshList RefreshListEvent;
    
  • 定义将执行操作(即刷新​​网格)的方法

    private void RefreshListView()
    {
        // Code to refresh the grid
    }
    
  • 现在需要在WindowAddActor

    中定义一个Delegate

    Public 委托 UpdateActor;

  • 现在我们必须编写打开 WindowAddActor 表单的按钮单击代码 让按钮为 btnAddActor,因此它的 Click 事件将为 btnAddActor_click,我们有初始化我们的 delegate-event,WindowAddActor 的实例,并在显示该表单之前将事件分配给 WindowAddActor 中的委托。这可以编码为:

     private void btnAddActor_click(object sender, EventArgs e)
     {
          WindowAddActor actorInstance = new WindowAddActor();      
          RefreshListEvent += new RefreshList(RefreshListView); // event initialization
          actorInstance.UpdateActor =  RefreshListEvent; // assigning event to the Delegate
          actorInstance.Show(); 
     }
    
  • 现在我们必须从

    的 SaveButton 的点击事件中调用委托
    private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
    {
       // Perform save operation 
       UpdateActor.DynamicInvoke(); this will call the `RefreshListView` method of mainWindow
    
       this.Close();
    }