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

标签 c# wpf refresh

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

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

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

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

在我的其他窗口中单击“保存更改”后,是否有办法刷新我的 listboxActor?

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

我的 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 成为子窗体,它们将是主窗体中打开子窗体的按钮表单,并且您正在子项中执行一些任务并按下保存按钮,这将保存这些详细信息并关闭该表单。并且您想刷新与此事件关联的主窗体中的列表。为此,您可以使用委托(delegate)和事件;为此,您必须在主窗体和子窗体中执行许多任务,让我向您展示它如何帮助您:

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

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

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

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

    中定义一个Delegate

    公共(public)代表 UpdateActor;

  • 现在我们必须编写打开 WindowAddActor 表单的按钮点击代码 让按钮为 btnAddActor 因此它的点击事件将为 btnAddActor_click,我们必须初始化我们的委托(delegate)事件,即 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 的点击事件调用委托(delegate)

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

关于C# WPF 从另一个窗口刷新列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420633/

相关文章:

c# - 如何禁止键盘输入文本框中的空格,空白,("_")字符

c# - 可空引用类型和 Either 模式

c# - WPF 中的 EMGU CV 相机捕获?

java - JPA:回滚后刷新分离的实体并重新附加它

php - 如果 HTML 文件已更新,则执行 JavaScript

c# - 使用从 C# 到非托管驱动程序的嵌入式指针编码结构

c# - 在数据表中添加标签

c# - 按钮已禁用 - DialogHost 和日历

c# - 将当前鼠标位置传递给 ViewModel?

refresh - 如何在Watir-Webdrive中刷新页面?