0

アプリケーションのコアをポータブルクラスライブラリに移植しようとしていますが、バインディングがサポートされていないようです。

ViewModelのプロパティをObservableDictionary()で構成されるモデルにバインドしようとしていますINotifyPropertyChanged, INotifyCollectionChanged, IDictionary<string, string>。ビューモデルを初期化するときに次のコードを使用して、通常(WP7で)これを行います。

SetBinding(MyProperty, new Binding(string.Format("MyDictionary[{0}]", "thekey")) { Source = MyModel });

Bindingクラスが使用できないように見えるPortableClassLibrariesを使用する場合、これにどのようにアプローチしますか?

4

1 に答える 1

0

ViewModel の基本クラスを ViewModel の PropertyChanged イベントと ObservableDictionary の NotifyCollectionChanged イベントに接続することで、これを実装しました。次に、PropertyInfo、ディクショナリ キー、IPclValueConverter、およびコンバーター パラメーターのセットである PclBinding オブジェクトのコレクションに追加するメソッド (IValueConverter のコピーである IPclValueConverter の実装を追加で提供するための一連のオーバーロードを使用) があります。 .

PropertyChanged/NotifyCollectionChanged 内で、バインディングを更新する必要があるかどうかを確認し、更新する必要がある場合はコンバーター (存在する場合) を介して値を渡して更新を実行します。

これは、元の例から、必要に応じてバインディングを作成する ViewModel 内に次のように記述することを意味します。

SetBinding(() => MyProperty, "theKey");

誰かが実際にこのコードに興味を持っている場合は、喜んで投稿します。:)

于 2012-11-04T16:52:01.227 に答える