0

ここでMsDesktop スタックの例を使用してパターンを作成し、エンティティ セットのビュー/ビューモデル/リポジトリを確立しました。エンティティ セットの PrimaryKey (PartNumber と呼ばれる) は、ストアド プロシージャ関数マッピングを使用して ComplexType の多くの属性プロパティにマップされます。

RaisePropertyChangedEvent("Parts") をサブスクライブしてリストボックスに入力することは簡単にできましたが、取得できません:

    public Part SelectedPart
    {
        get { return p_SelectedPart; }

        set
        {
            base.RaisePropertyChangingEvent("SelectedPart");
            p_SelectedPart = value;
            base.RaisePropertyChangedEvent("SelectedPart");
        }
    }

OnPropertyChangedEvent でサブスクライブすると、次のようになります。

 void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "SelectedPart":

                /* When we select a Part, we need to configure the view model
                    * to display the selected Part's attributes. */

                VMSProcServices.ReturnExtendedPartProperties(this);

                break;

            case "Parts":

                /* When we load a Parts collection from the data store, we replace 
                    * the existing collection in the Parts property. After we do that, 
                    * we need to subscribe to the CollectionChanging event of the new
                    * collection. */

                this.Parts.CollectionChanging += OnPartsCollectionChanging;
                break;
        }

ReturnExtendedProperties() は次のように定義されます。

 public static void ReturnExtendedPartProperties(MainWindowVM mainWindowVM)
 {
      MyEntities myEntities = new MyEntities();
      mainWindow.ReturnAttsPerPn_Result = new ObservableCollection<ReturnAttsPerPn_Result>();
      if (mainWindowVM.SelectedPart != null)
      {
          mainwWindowVm.ReturnAttsPerPn_Result.Clear();
          foreach (ReturnAttsPerPn_Result attResult in myEntities.ReturnAttsPerPn(mainWindowVM.SelectedPart.PnID))
          { 
              mainWindowVM.ReturnAttsPerPn_Result.Add(attResult);
          }
       }
  }

これをデバッグすると、Locals ウィンドウに SelectedPart プロパティのデータはありませんが、Part オブジェクトの ObservableCollection はそこにあります (このデータを確認できるので、これは明らかです)。また、「SelectedPart」のケースに足を踏み入れることさえありません。OnPropertyChanged メソッドの「Part」のみです。

私の主な質問は次のとおりです (私は初心者であるため、表現が不十分であることをお許しください): SelectedPart プロパティの値を効果的に「キャッチ」して、それをストアド プロシージャにフィードし、出力をコレクションとして使用するにはどうすればよいですか?

読んでくれてありがとう、どんな助けでも大歓迎です:)

編集:: タイトルを変更

4

1 に答える 1

0

恥ずかしいことに、私の間違いを見つけました。これは、キャッチできなかったバインディング パスの単なる構文エラーでした (投稿されていません)。誰かへ:

 public static void ReturnExtendedPartProperties(MainWindowVM mainWindowVM)
  {
       mainWindow.ReturnAttsPerPn_Result = new ObservableCollection<ReturnAttsPerPn_Result>();
       using (var myEntities = new MyEntities())
       {
             var results = myEntities.ReturnAttsPerPn(mainWindowVM.SelectedPart.PnID)
             if (mainWindowVM.SelectedPart != null)
             {
                  mainWindowVM.ReturnAttsPerPn_Result.Clear();
                  foreach (ReturnAttsPerPn_Result attresult in results)
                  {
                        mainWindowVM.ReturnAttsPerPn_Result.Add(attresult);
                  }
              } 
       }
 }
于 2012-09-14T19:55:28.813 に答える