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

时间:2017-01-02 01:56:16

标签: c# wpf refresh

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

  
      
  • tblMovies(MovieID:PK,Title,Director,Genre等)
  •   
  • tblActors(ActorID:PK,MovieID:FK,名字,姓氏等)
  •   

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

在这个窗口中,我添加了一个按钮来创建一个新的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;
    }

提前致谢!

1 个答案:

答案 0 :(得分:2)

好的,谢谢你的解释性评论......!我有一个建议给你,如果这有助于你编写你的场景,请告诉我:

所以你有两种形式WindowShowDetails让它成为主形式,WindowAddActor成为孩子,他们将是主窗体中的一个按钮,打开子窗体,你正在做孩子中的一些任务,然后按“保存”按钮,这将保存这些详细信息并关闭该表单。并且您希望在与此事件关联的主窗体中刷新List。为此你可以使用代表和事件;为此,你必须在主要形式和孩子中完成许多任务,让我告诉你它如何帮助你:

  • 在主窗体中定义委托:

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

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

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

    中定义一个代表

    Public Delegate UpdateActor;

  • 现在我们必须编写按钮点击代码,打开WindowAddActor表单让按钮为btnAddActor,以便其Click事件为btnAddActor_click,我们必须初始化我们的代表-event,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的点击事件中调用该委托

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