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

本文关键字:窗口 数据 | 更新日期: 2023-09-27 18:14:10

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

现在我在WPF做客户端。在MainWindow中,我有一个来自HomeDAL的该类变量,并且我有一个Button"添加新记录"。点击这个按钮打开一个新窗口,其中我有一些TextBox es来描述新记录和Button"Make"。点击这个"制作"按钮,我关闭了第二个窗口。

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

下面是我在第二个窗口中的函数:

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();
}   
关于为什么我的程序崩溃有什么提示吗?

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

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

进行以下操作
  1. 您的表示层将是MainWindow
  2. DataAccessLayer将是HomeDAL

步骤将是

    当你像现在一样点击Make按钮时,你将创建一个Book类型的对象并填充值。
  • 您将创建HomeDAL的对象,如var dal = new HomeDAL()或使用一些IOC,如Unity
  • 然后将新创建的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.
}   

请让我们知道你对这个实现的理解和分享你的想法。