来自另一个 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();
}
我正在制作一个基于 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 }
现在需要在
中定义一个DelegateWindowAddActor
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(); }