gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:22:17 27 4
gpt4 key购买 nike

我正在制作一个基于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com