将数据从子窗口发送到父窗口

时间:2013-05-18 16:40:52

标签: c# .net wpf

我做了一个小型的HomeDAL库,我有一个类,有连接,断开连接,添加,删除,showbooks等功能来管理我的数据库。

现在我在WPF做客户端。在MainWindow中,我的HomeDAL中有一个此类的变量,我有一个Button“添加新记录”。单击此按钮将打开一个新窗口,其中我有一些TextBox es来描述新记录和Button“Make”。单击此“制作”按钮,我关闭第二个窗口。

我想在HomeDAL中使用变量MainWindow来运行其中一个函数,但它不起作用,应用程序崩溃。

以下是我在第二个窗口中的功能:

private void btnOkClicked(object sender, RoutedEventArgs e)
{
    MainWindow test = (MainWindow)this.Parent;
    Book newBook = new Book()
    {
        Tytul = tbTytul.Text,
        Autor = tbAutor.Text,
        Cena = Int32.Parse(tbCena.Text),
        Przeczytane = tbPrzeczytane.Text
    };
    test.SqlConn.InsertBook(newBook);
    this.Close();
}   

关于我的程序崩溃原因的任何提示?

1 个答案:

答案 0 :(得分:0)

由于您的应用程序中有DAL层,我建议基于

进行以下操作
  1. 您的演示文稿层将为MainWindow
  2. DataAccessLayer将为HomeDAL
  3. 步骤将是

    • 当您单击Make按钮时,您将创建一个Book类型的对象并填充值。
    • 您将为HomeDAL创建一个对象,例如var dal = new HomeDAL()或使用Unity之类的IOC。
    • 然后将新创建的book对象传递给DAL,以便DAL层可以将数据保存在数据库中。

    注意:Page是为每个请求创建的对象,如果您已经拥有DAL图层,则不必将数据访问与表示层混淆。

    在这种情况下,您的样本将如下所示

     private void btnOkClicked(object sender, RoutedEventArgs e)
    {
        Book newBook = new Book()
        {
            Tytul = tbTytul.Text,
            Autor = tbAutor.Text,
            Cena = Int32.Parse(tbCena.Text),
            Przeczytane = tbPrzeczytane.Text
        };
        var dal = new HomeDAL(); // pass any initialization parameters if required for the DAL to self initialize.
        var newBookId = dal.CreateBook(newBook);
        // use some mechanism to show the newly created book id to the user or else redirect the user to the grid that shows the books sorted by creation date so that the book he created now will be shown as the first one.
    
    }   
    

    请告诉我们您对此实施的理解并分享您的想法。