1

我将以下 SQL 表映射到两个实体(具有相同的属性)

 Two Tables look like:

 MasterPartNumbers (parent) many  -> many     MasterPartsLists (children)
 (PK) pnID                                   (PK)(FK) parentPnID
      pn                                     (PK)     pnID   
      pnDesc                                          qty
                                                      price
                                                      isAssembly

注意:这些 SQL 表只是简单地添加到我的模型中,映射保持原样。所以它们每个都有主/外键属性作为导航属性。

我有一个ObservableCollectioni 用作ItemsSource绑定,它看起来像:

         public ObservableCollection<MasterPartNumber> SelectedAssyBOMLineItems
    {
        get
        {

            if (this._selectedTopLevelAssyPN != null)
            {
                var bomItems = (from childMpn in this._context.MasterPartNumbers
                                from childMpl in this._context.MasterPartsLists
                                where childMpl.parentPnID == this._selectedTopLevelAssyPN.pnID //this._selectedTopLevelAssyPn.pnID is simply the selected "Parent" part number in an adjacent ListBox on my View (usercontrol). It is of type MasterPartNumber
                                where childMpl.pnID == childMpn.pnID
                                select childMpn
                                );

                return this._selectedAssyBOMLineItems = new ObservableCollection<MasterPartNumber>(bomItems);
            }
            return this._selectedAssyBOMLineItems;
        }
        set
        {
            this._selectedAssyBOMLineItems = value;
            RaisePropertyChanged("SelectedAssyBOMLineItems");
        }

到目前为止一切顺利——我能够绑定到 MasterPartNumbers 的所有属性,并且我正在查看我的 DataGrid 中的查询提供的预期数据子集。但是,我无法绑定到任何 MasterPartNumbers.MasterPartsLists 属性。当我单步调试调试器时,我可以看到它们已加载。我错过了什么?

我希望通过_context.MasterPartNumbers.Include("MasterPartsLists")在查询中使用类似 a 的内容从上下文中加载相关实体,将绑定路径引用为 {Binding MasterPartsList.isAssy}。

我正在寻找的行为类似于在此处找到的答案

提前致谢!:)

4

1 回答 1

0

在这种情况下,您很可能希望第二个控件使用类似的东西绑定到第一个控件

<DataGrid ItemSource="{Binding MasterPartNumbers}" x:Name="MasterControl" />
<DataGrid ItemSource="{Binding ElementName=MasterControl, Path=SelectedItem.Children} />

假设您的 MasterPartNumbers 类具有以下形式

class MasterPartNumbers 
{
    IEnumerable<MasterPartsLists> Children { get; }
{

足够简单

            var bomItems = this._context.MasterPartNumbers.Include(x => x.Children);

您可能需要从 EntityFramework 5.x 程序集中导入 System.Entity。否则,您将需要使用字符串而不是 lambda。

于 2013-02-27T03:34:58.897 回答