c#WPF无法从二级窗口获取父窗口

时间:2017-01-04 15:44:21

标签: c# wpf datagrid

我是WPF和.NET编程的新手。我正在设计一个POS应用程序,其数据流如下所示:

  1. 主页窗口有按钮 - 品牌和广告资源。
  2. 点击“清单”按钮会打开一个新窗口 - 广告资源,其中包含所有广告资源项目。每个库存行都有一个相应的按钮。
  3. 单击库存行按钮(从步骤2开始)时,主窗口中的数据网格中有一个条目。
  4. 当我点击“品牌”按钮时,会出现一个新窗口 - 包含不同品牌的品牌
  5. 现在点击品牌时,将打开“库存”窗口(第2步),其中的商品按品牌价值进行过滤。
  6. 现在我的问题是,我可以在单击“库存”按钮时从“库存”窗口加载“主页”窗口数据网格,但是当通过单击“品牌”窗口中的品牌打开库存窗口时,该品牌窗口又会通过单击“主页”上的“品牌”按钮打开window正在给出一个null异常。

    我有以下查询,点击库存项目行按钮时会触发:

    private void btnSelect_Click(object sender, RoutedEventArgs e)
        {
            Home myObject = Owner as Home;
    
           Inventory item = (Inventory)lstInventory.SelectedItem;
    
            myObject.BillInsert(item.Local.ToString(), "1",     item.Price.ToString());           
        }
    

    在第一种情况下,myObject返回有效值,但在第二种情况下返回null。

    在Inventory.xaml.cs中,我为Inventory定义了一个接受参数BrandId的构造函数,如下所示:

    public OpenInventory(int? attributeID, string attributeName=null) : this()
    

    单击“清单”按钮时,将触发此方法,如下所示:

    private void btnInventory_Click(object sender, RoutedEventArgs e)
        {
            OpenInventory opInv = new OpenInventory(null);
            opInv.Owner = this;
        }
    

    单击“品牌”行按钮时,将从“品牌”窗口触发该方法,如下所示:

    private void btnBrand_Click(object sender, RoutedEventArgs e)
        {
            Button _button = (Button)sender;
    
            OpenInventory window = new OpenInventory(Convert.ToInt32(_button.CommandParameter.ToString()), "BrandId");
        }
    

    因此,单击主屏幕中的库存按钮和品牌屏幕中的库存行按钮时,将打开相同的库存窗口。

    点击“库存”按钮后,将触发给定的按钮选择事件:

    private void btnSelect_Click(object sender, RoutedEventArgs e)
        {
            Home myObject = Owner as Home;
    
           Inventory item = (Inventory)lstInventory.SelectedItem;
    
            myObject.BillInsert(item.Local.ToString(), "1",     item.Price.ToString());           
        }
    

    现在问题是,当直接从主屏幕点击库存按钮并单击行按钮时,所有者返回POS.Home值,但是当从品牌窗口单击它时,所有者返回Null。

0 个答案:

没有答案