2017-06-15 147 views
-1

我的主窗口中有一個public void grid_refresh()方法,它刷新我的DataGrid(主窗口的DataGrid)。現在我有另一個類(Window),它向Datagrid添加了新的元素。我沒有做的事情是訪問這個grid_refresh方法刷新網格與新的條目,當我點擊我的另一個窗口(添加窗口)的添加按鈕。在這個其他類中執行其他類的方法wpf

主窗口代碼:

方法來開拓AddBook窗口:

 private void AddBuch(object sender, RoutedEventArgs e) 
    { 
     if (Title == "Dictionary") 
     { 
      MessageBox.Show("Wählen Sie zuerst unter Ansicht eine Kategorie aus!"); 
     } 
     else 
     { 
      addBuch addbuch = new addBuch(this); 
      addbuch.Show(); 
      //do { } while (addbuch.ShowDialog() == true); 
     } 
    } 

我想訪問的方法:

public void liste_aktualisieren() 

的窗口代碼我想訪問方法來自:

public partial class addBuch : Window 
{ 
    private MainWindow mainWindow; 

    public addBuch(Window owner) 
    { 
     InitializeComponent(); 
     Owner = owner; 
     SetProperties(); 
     owner.IsEnabled = false; 
    } 
    private void btn_add_Click(object sender, RoutedEventArgs e) 
    { 
     if (txt_name.Text == "" | txt_isbn.Text == "" | txt_datum.Text == "" | txt_genre.Text == "" | txt_autor.Text == "" | txt_seiten.Text == "") 
     { 
      MessageBox.Show("Es sollte allen Feldern ein Wert zugewiesen werden.\nVersuchen Sie es erneut!"); 
     } 
     else 
     { 
      cDictionary.Buch_hinzufuegen(txt_name.Text, txt_isbn.Text, txt_datum.Text, txt_genre.Text, txt_autor.Text, Convert.ToInt32(txt_seiten.Text)); 
      Owner.IsEnabled = true; 

      //Somewhere here I want to Acess the DataGrid Refresh Method so the Datagrid in the Main Window Refreshes. 
     } 
    } 

我真的不知道如何解決這個問題? 我的目的是刷新DataGrid中的btn_add_Click按下

+0

這將通過使用MVVM和一個'ObservableCollection'很容易解決 – BradleyDotNET

+0

您有很多選項。從字面上理解你的問題,在單擊按鈕時引發的'addBuch'增加一個'event'是最好的。在你的發佈代碼中,你有一個'mainWindow'字段,但從不初始化它;目前還不清楚爲什麼你的代碼是這樣的,但當然如果你想初始化這個字段,你可以用它直接調用這個方法。這種耦合是不好的,但如果你願意,你可以做到。您也可以使用MVVM並將VM或集合傳遞給'addBuch'構造函數,以便構造函數可以直接更新集合或調用一個'ICommand'來實現。 –

回答

0

既然你注入你的addBuch窗口的MainWindow引用的那一刻,你可以調用通過此引用的方法:

public partial class addBuch : Window 
{ 
    private MainWindow mainWindow; 

    public addBuch(MainWindow owner) //<-- 
    { 
     InitializeComponent(); 
     Owner = owner; 
     SetProperties(); 
     owner.IsEnabled = false; 
     mainWindow = owner; //<--- 
    } 

    private void btn_add_Click(object sender, RoutedEventArgs e) 
    { 
     //... 
     mainWindow.grid_refresh(); 
    } 
}