4

グリッドのあるウィンドウがあります。このウィンドウにはボタンがあり、このボタンを押すと、モーダルダイアログが表示されます。

コード:

    private void Edit_Click6S(object sender, RoutedEventArgs e)
    {
        TextEditWindow editWindow = new TextEditWindow();
        editWindow.ShowDialog();
    }

ユーザーがこのダイアログを終了すると、次のコードが呼び出されます。

    Window.Close()

ただし、親ウィンドウのグリッドは更新されません。子ダイアログが閉じられたときに親ウィンドウグリッドを再初期化する方法はありますか?そうですか、どうですか?

4

2 に答える 2

6

ShowDialog()ダイアログは閉じるまで実行をブロックするため、呼び出しの直後にグリッドにデータを入力できます。

private void Edit_Click6S(object sender, RoutedEventArgs e)
{
    TextEditWindow editWindow = new TextEditWindow();
    editWindow.ShowDialog();
    PopulateGrid();
}

それ以外の場合は、ダイアログのClosedイベントを処理できます

editWindow.Closed += dialog_Closed;    

private void dialog_Closed(object sender, System.EventArgs e)
{
    PopulateGrid();
}
于 2012-08-15T12:56:20.283 に答える
0

私のコメントをもう少し詳しく説明します。これはよくある質問であり、少し混乱する可能性があります。ただし、デリゲートを使用してフォーム間のデータを管理します。ここにいくつかのコードがあります。コンパイルの準備ができているとは約束できませんが、これを正しく行う方法を示すのに役立つはずです。

 public partial class MainWindow : Window
{
    public delegate void MenuClickedDelegate(); 
    public MainWindow()
    {
       InitializeComponent();
    }
    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
       YourDialog yourDialog = new YourForm();
       yourDialog .MenuClickCallback = new MenuClickedDelegate(this.DoSomething);
       yourDialog .ShowDialog();
    }
    private void DoSomething()
    {
    }
}

次に、ダイアログについて:

public partial class YourDialog  : Window
{
     public MainWindow.MenuClickedDelegate MenuClickCallback;
     public YourDialog()
     {
         InitializeComponent();
     }

     private void Edit_Click6S(object sender, RoutedEventArgs e)
     {
         this.close();
         MenuClickCallback;
     }
}
于 2012-08-15T13:18:25.527 に答える