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 回答