できるだけ柔軟に、すばやく簡単に「再スキン化」できるアプリケーションを作成したいと考えています。通常、これはリソース辞書のテンプレートとスタイルを交換することで実現します。MVVMで「ルックレス」ビューを作成する
WPFのカスタムコントロールは、「ルックレス」に設計されています。すべてのロジックがコードになり、辞書のコントロールテンプレートを使用して外観がコントロールに関連付けられます。
MVVMとカスタムコントロールの間には多くのオーバーラップがあります。多くの開発者は、MVVMはカスタムコントロールよりも優れていると言います。どちらも、ビューから別のコードファイルにロジックを移動する方法と見ることができます。カスタムコントロールにビュー固有のロジックが含まれているときに、VMにドメイン関連のロジックが含まれている場合、2つの意味に違いがあると思います。
関連するビューXAMLをスワップアウトできるリソースディクショナリに移動する最適な方法は何ですか。私は辞書でストレートデータテンプレートを使うべきですか(私の好みの方法ではなく、ビューは複雑です)?ビューを置き換えるためのカスタムコントロールを作成し、それに対するコントロールテンプレートを定義する必要があります(コントロールとVMの間でコードが重複します)。これらのファイルをリソース辞書でスワップアウトできるように、ビューに対してUserControlsを使用し、これらのコントロールのXAMLを分離する必要がありますか?
この問題をどのように処理しますか?助言がありますか?
ありがとうございます!
MVVMとカスタムコントロールは、問題に対する競合するアプローチではありません。 –
両方を同時に使用してみると、2つの間に重なりがあることがわかります。シナリオによって異なります。 –
私は、類似のスキン制御テンプルと一致する命名規則で、リソースディクショナリ全体を使用します。実行時に辞書をre-skinに再リンクするだけで済みます。 – CodeWarrior