0

モデルファイルに2つの関連エンティティがあります。

彼らは次のように見えます:

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

DataGridのItemsSourceを1つにしかバインドできない場合ObservableCollection、これら2つの関連エンティティからのすべての情報をDataGridに含めるにはどうすればよいですか?

注:私はにバインドせず、通知にcollectionViews依存しPropertyChanged、ビューモデルのプロパティに「SelectedItem」を設定するだけです。1つのコレクションにまとめるには、エンティティタイプの1つを他のタイプにキャストする必要がある可能性が高いと思います。

前もって感謝します!

4

3 に答える 3

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");
        }
    }

dataGridTextColumnをバインドしたパスは

 {Binding MasterPartNumber.pnDesc}

迅速に対応していただきありがとうございます。

于 2013-02-25T20:19:44.650 に答える
1

のとして実際に親リストにバインドしてから、各子のデータテンプレートで、を子アイテムにバインドすると、おそらく簡単になりDataContextます。DataGridDataContext

次に、必要な場所に情報があります。

于 2013-02-25T19:59:36.417 に答える
1

エンティティの部分クラスを作成し、MasterPartsListサブエンティティの詳細にアクセスできます。

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