1

次の SQL テーブルを 2 つのエンティティ (同じプロパティを持つ) にマップしています。

 Two Tables look like:

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

注: これらの SQL テーブルは単にモデルに追加されただけで、マッピングはそのまま残されています。そのため、それぞれがナビゲーション プロパティとしてプライマリ/外部キー プロパティを持っています。

バインディングObservableCollectionとして使用しているものがあり、次のようになります。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 プロパティのいずれにもバインドできません。デバッガーをステップ実行すると、それらが読み込まれていることがわかります。私は何が欠けていますか?

クエリでa のようなものを使用してコンテキストから関連するエンティティを読み込むことで、バインド パスを {Binding MasterPartsList.isAssy} として参照するだけでよいと考えてい_context.MasterPartNumbers.Include("MasterPartsLists")ました。

私が探している動作は、ここにある答えに似ています

前もって感謝します!:)

4

1 に答える 1

0

その場合、次のようなものを使用して、2 番目のコントロールを最初のコントロールにバインドすることが最も可能性が高くなります。

<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 をインポートする必要がある場合があります。それ以外の場合は、ラムダではなく文字列を使用する必要があります。

于 2013-02-27T03:34:58.897 に答える