【问题标题】:Binding an ObservableCollection of two related entities to one DataGrid将两个相关实体的 ObservableCollection 绑定到一个 DataGrid
【发布时间】:2013-02-11 01:57:42
【问题描述】:

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

它们看起来像:

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

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

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

提前致谢!

【问题讨论】:

    标签: c# linq entity-framework datagrid observablecollection


    【解决方案1】:

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

    我的viewmodel相关代码如下:

      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}
    

    感谢两位如此及时的回复。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        public partial class MasterPartsList
        {
            public string PartDescription
            {
                get { return this.MasterPartNumber.partNumDesc; }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-23
          • 2013-09-07
          • 1970-01-01
          • 2012-12-19
          • 2016-09-13
          • 1970-01-01
          • 2015-12-14
          相关资源
          最近更新 更多