C#WPF从另一个窗口刷新列表框

我正在基于Access数据库创建一个
WPF项目.

该数据库有两个表:

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

我有列表框,我可以看到所有的电影,如果我点击一个,它会显示一个新窗口,其中包含有关该电影的所有详细信息:标题,导演,流派,还有演员.

在这个窗口中,我添加了一个按钮来创建一个新的actor.这将打开一个新窗口,您可以在其中输入MovieID(FK)和有关actor的信息.
当我单击保存更改时,它可以工作,窗口关闭,但我的listboxActors需要手动刷新(我已添加了一个按钮)以查看新的actor.

在我点击其他窗口中的“保存更改”后,有没有办法刷新我的listboxActors?

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

我的listboxActors:

        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让它成为主窗体,WindowAddActor是子窗口,它们将是主窗体中打开子窗体的按钮,你在子窗口做一些任务并按下保存按钮,这将保存这些细节并关闭该表单.并且您希望在与此事件关联的主窗体中刷新List.为此你可以使用委托和事件;为此你必须在主要形式和孩子中完成许多任务,让我告诉你它如何帮助你:

>在主窗体中定义委托:

public delegate void RefreshList();

>定义该委托类型的事件

public event RefreshList RefreshListEvent;

>定义将执行操作的方法(即刷新网格)

private void RefreshListView()
{
    // Code to refresh the grid
}

>现在需要在WindowAddActor中定义一个Delegate

Public Delegate UpdateActor;
>现在我们必须编写单击按钮,打开WindowAddActor表单让按钮成为btnAddActor,使其Click事件为btnAddActor_click,我们必须初始化我们的委托事件,WindowAddActor的实例,并将事件分配给WindowAddActor中的Delegate在显示该表格之前.这可以编码为:

 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的click事件中调用该委托

private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
{
   // Perform save operation 
   UpdateActor.DynamicInvoke(); this will call the `RefreshListView` method of mainWindow

   this.Close();
}
点赞