2013-02-25 3 views
0

У меня есть два связанных объекта в моем файле модели.Связывание ObservableCollection двух связанных объектов с одним DataGrid

Они похожи:

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

Если я могу только связать ItemsSource моего DataGrid в один ObservableCollection, как я могу включать в себя всю информацию из этих двух родственных организаций в моем DataGrid?

Примечание: я не привязываюсь к collectionViews, полагаясь только на PropertyChanged уведомлений и настроек «SelectedItem» для объекта на моей модели. Я понимаю, что, скорее всего, мне нужно будет перевести один из типов сущностей в другой, чтобы объединить их в одну коллекцию.

Спасибо заранее!

ответ

2

Через несколько минут после этой публикации, я понял, все уже был правильно настроены, и я только что опечатка на 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} 

Спасибо, что так быстро ответили.

1

Возможно, было бы проще, если вы фактически привязываетесь к списку своих родителей как DataContext вашего DataGrid, а затем в шаблоне данных для каждого ребенка вы связываете DataContext с дочерним элементом.

Тогда у вас есть информация, где бы вы ни нуждались.

1

Ваш объект может создать частичный класс вашего объекта MasterPartsList и получить доступ к деталям вашей сущности.

public partial class MasterPartsList 
{ 
    public string PartDescription 
    { 
     get { return this.MasterPartNumber.partNumDesc; } 
    } 
} 
Смежные вопросы