0

依存関係プロパティ (いくつかのオブジェクトのコレクション) を持つ UserControl があるとします。とにかく、依存関係プロパティが設定されている場合、カプセル化を壊さずにビューモデルによって公開されたコマンドを自動的に実行し、これを「MVVM の方法」で実行するためにありますか? ?

そして、はい、いつでもプロパティ変更静的ハンドラーを接続し、オブジェクトをユーザーコントロールのインスタンスにキャストし、データコンテキストを取得し、それをビューモデルにキャストして、コマンドを手動で呼び出すことができることを知っています

編集:例が役立つかもしれません。私の UserControl には「ItemsSource」依存関係プロパティがあります..ObjectA のコレクションに設定できるようにしたいです。取得のみ可能で、ObjectB のコレクションである "Items" 依存関係プロパティがあります。

ItemSource を設定すると、ObjectAs のコレクションがビューモデルによって ObjectBs に 1 対 1 で変換され、Items 依存関係プロパティがこれを自動的に反映するような動作が必要です。

これを行うには、書き込み専用の ItemsSource と読み取り専用の Items プロパティが必要です。

4

2 に答える 2

1

明確にするために:

  • コントロールに書き込み専用の DependencyProperty ItemsSourceが必要です
  • コントロールのViewModelに読み取り専用の Dependency-Property Itemsが必要です
  • アイテムは変換されたバージョンを返し、 ItemsSourceの変更を反映する必要があります

それがあなたが望むものなら、それは解決策でしょうか:

  • コントロールと同じタイプのViewModelにItemsSource-Propertyを追加します
  • コントロールの DP に双方向バインドする
  • ViewModelのItemsSourceプロパティの Set アクセサーで、 ItemsコレクションにItemsSource要素の変換されたバージョンを入力します。
  • Itemsプロパティの OnPropertyChanged を発生させる

このシナリオでは、Control と ViewModel のItemsSourceを読み取ることができます。私の知る限り、書き込み専用の DP は使用できません。

書き込み専用 DP に関する SO スレッド

ただし、このアプローチはとにかく機能するはずです。

これが役に立てば幸いです、乾杯...

于 2012-11-08T13:04:39.323 に答える
0

使用するObservableCollection場合は、それのCollectionChangedイベントを使用できます。

ビューモデル:

  private ObservableCollection<object> _Objects
  public ObservableCollection<object> Objects
  {
    get { return _Objects; }
    set { _Objects = value; 
           OnPropertyChanged(new PropertyChangedEventArgs("Objects"));
     }
  }

  Objects.CollectionChanged+= new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Objects_CollectionChanged); 

 void Objects_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {

    }
于 2012-11-08T07:12:52.640 に答える