0

我的模型文件中有两个相关实体。

他们看起来像:

      MasterPartNumber (parent, one) --> MasterPartsList (children, many)
      (PK) partNum                        (PK) listID
           partNumDesc                    (FK) partNum
                                               parentAssyPartNum

如果我只能将我的 DataGrid 的 ItemsSource 绑定到一个ObservableCollection,我如何将来自这两个相关实体的所有信息包含在我的 DataGrid 中?

注意:我不绑定到collectionViews,只依赖PropertyChanged通知并将“SelectedItem”设置为我的视图模型上的属性。我意识到我很可能需要将其中一种实体类型转换为另一种,以便将它们组合在一个集合下。

提前致谢!

4

3 回答 3

2

发布后几分钟,我意识到一切都已经正确设置,我只是在包含(/相关)表属性的 xaml 绑定上有一个错字:

我的视图模型相关代码如下:

  public ObservableCollection<MasterPartNumber> AssyPns
    {
        get
        {
                var enumerable = this._context.MasterPartNumbers.Include("MasterPartsLists").Where(t => t.MasterPartsLists.Any(x => x.isAssy == true));




                return this._assyPns = new ObservableCollection<MasterPartNumber>(enumerable);



        }

        set 
        {
            this._assyPns = value;
            RaisePropertyChanged("AssyPns");

        }
    }

            public MasterPartNumber SelectedTopLevelAssyPN //<-- this is the selected Parent item i am getting my DataGrid's ObservableCollection from
    {
        get { return this._selectedTopLevelAssyPN; }
        set
        {
            this._selectedTopLevelAssyPN = value;
            RaisePropertyChanged("SelectedTopLevelAssyPN");
            RaisePropertyChanged("SelectedAssyBOMLineItems");
        }
    }

    public ObservableCollection<MasterPartsList> SelectedAssyBOMLineItems //<-- this is my itemsSource
    {
        get
        {
            if (this._selectedTopLevelAssyPN != null)
            {
                var children = _context.MasterPartsLists.Where(lineItem => lineItem.parentAssyPN != null)
                                                        .Where(lineItem => lineItem.parentAssyPN == this._selectedTopLevelAssyPN.pn);     


                return this._selectedAssyBOMLineItems = new ObservableCollection<MasterPartsList>(children);


            }

            return this._selectedAssyBOMLineItems;
        }
        set
        {
            this._selectedAssyBOMLineItems = value;
            RaisePropertyChanged("SelectedAssyBOMLineItems");
        }
    }

我将 dataGrid TextColumn 绑定到的路径只是

 {Binding MasterPartNumber.pnDesc}

谢谢两位这么及时的回复。

于 2013-02-25T20:19:44.650 回答
1

您可以创建MasterPartsList实体的部分类并访问您的子实体详细信息。

public partial class MasterPartsList
{
    public string PartDescription
    {
        get { return this.MasterPartNumber.partNumDesc; }
    }
}
于 2013-02-25T20:04:20.393 回答
1

DataContext如果您实际上将 绑定到您的父母列表DataGrid,然后在每个孩子的数据模板中将 绑定DataContext到子项,这可能会更容易。

然后,您可以在任何需要的地方获得信息。

于 2013-02-25T19:59:36.417 回答