2

ViewModel で見つかった列挙型の影響を受けるさまざまなプロパティを持つ CustomControl を作成しようとしています。作成された CustomControl はビュー内で呼び出されます。

コントロール内のいくつかのことを変更する列挙バインディングが必要です。これらには次のものが含まれます。

  • 画像ソースの変更 (変更された画像は、CustomControl ライブラリ内に作成されたフォルダー内で静的です)、
  • TextBlocks Text プロパティを変更すると、テキスト オプションは、X 個のケースのいずれかの間で静的になります (X は可能な列挙状態の数です (これも変化しません))。

これら 2 つの DP はリンクされることに注意してください。たとえば、バインドされた列挙型がケース x の場合、画像ソースが変更さ、表示されるテキストが表示されます。基本的に、ここで公開されている 2 つの DP は同じ enumにバインドされますが、使用方法が異なります。


それで、私の質問は、上記のものを運ぶための最良の方法は何ですか?

私はすでに2つの可能な方法について考えました:

  1. 有用な DP 型を公開し、これらのプロパティを同じ列挙型 (たとえば、Property1="{Binding someEnum}" Property2="{Binding someEnum}") にバインドし、これらの列挙型を便利な型に変換する ValueConvertor を提供して、CustomControl が使用できるようにします。
  2. または、列挙型を受け入れる単一の DP を公開し、バインドされた列挙型の値に応じて、CustomControl コード内の別の場所でプロパティを変更しますか?

Views コード ビハインド ファイルで値コンバーターを使用してオプション 1 を実行することにかなり満足しています。ただし、コントロールの独立性が低下するため、この方法は避けたいと思います。

オプション 2 については、この方法で行う方法が完全にはわからないので、記事や簡単な説明が役立つと思われる場合は、DP に INoitifyPropertyChanged を実装して、値が変更されたことをコントロールが認識できるようにすることができます。バインドされた列挙型が変更されましたか?

また、私は上記の 2 つの方法に限定されているわけではありません。より良い方法があると思われる場合は、提案してください。

MVVM アーキテクチャ (MVVM Light Toolkit) と組み合わせて WPF (C#) を使用しています。

簡単なメモ: ViewModel を変更することは避けたいと思います - 絶対に必要でない限り、公開された列挙型とそこにあるすべてのロジックはそのままにしておく必要があります!

回答をお寄せいただきありがとうございます。問題に関する個人的な進捗状況や、リクエストされた追加情報に関する回答と更新を使用して、この質問を可能な限り更新するように努めます。

4

1 に答える 1

0

どちらのソリューションも問題なく機能するはずです。

2 番目の解決策では、依存関係プロパティをPropertyChangedCallbackに登録するだけです。

public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(EnumType), typeof(MyClass), new PropertyMetadata(new PropertyChangedCallback(MyPropertyChangedHandler)));

static void MyPropertyChangedHandler(DependencyObject obj, DependencyPropertyChangedEventArgs args)

FrameworkPropertyMetadataの使用方法については、このスレッドを確認してくださいUIPropertyMetadataPropertyMetadata プレーンな PropertyMetadata で FrameworkPropertyMetadata または UIPropertyMetadata を使用する必要があるのはいつですか?

最初のソリューションの利点は、それが軽いことです。必要なのは 2 だけですValueConvertors。依存関係プロパティは必要ないため、別の開発者は、あなたのxaml. 欠点は、複数の場所で同じロジックを持つカスタム コントロールを使用する予定がある場合、それらのコンバーターをコピーして貼り付けるのはあまりうまくいかないことです。

2 番目のソリューションは、最初のソリューションのミラーです。より高いレベルの再利用性という利点がありますが、ロジックは制御の奥深くに埋め込まれます。

于 2012-06-19T23:21:13.403 に答える