アップデート
StackOverflow の wiki の精神では、ここに更新があります。
以下に、Joe White の IValueConverter の提案をスパイクしました。それは魅力のように機能します。
これの「クイックスタート」の例を書きました。これは、安価な文字列置換を使用して、ViewModels->Views のマッピングを自動化します。ViewModel を表す View が見つからない場合、デフォルトで「Under Construction」ページが表示されます。Joe White のアイデアだったので、このアプローチを「WPF MVVM White」と呼んでいます。ここにいくつかのスクリーンショットがあります。
最初の画像は、純粋な命名規則に基づいて、「[SomeControlName]ViewModel」に対応する「[SomeControlName]View」がある場合です。2 つ目は、ModelView にそれを表すビューがない場合です。ViewModel から View への長いマッピングを持つ ResourceDictionaries はもうありません。現在は純粋な命名規則です。
ここにプロジェクトのダウンロードを投稿しました: Mvvm.White.Quickstart.zip
元の投稿
週末、WPF MVVMに関するJosh Smith の素晴らしい MSDN 記事を読みました。カルトクラシックになる運命にあります。
ViewModelをレンダリングするように WPF に要求するという魔法に頭を悩ませるのに、しばらく時間がかかりました。
「これがクラス、WPF です。それを表示するために使用する UI を見つけてください」と言っているようなものです。
この魔法を逃した人のために、WPF はResourceDictionary マッピングでModelViewのViewを検索し、対応するViewを引き出すことでこれを行うことができます。(下にスクロールして、図 10 ビューの提供)。
最初にすぐに思いつくのは、次の強力な命名規則が既に存在することです。
classNameView ("View" suffix)
classNameViewModel ("ViewModel" suffix)
私の質問は:
ResourceDictionaryはプログラムで操作できるので、だれかが Regex.Replace に成功したかどうか疑問に思っています。そのため、ルックアップは自動的に行われ、新しい View/ViewModel は命名規則によって解決されますか?
[編集] 私が想像しているのは、ResourceDictionary へのフック/傍受です。
...また、相互運用機能を使用してプルアウトし*View$
、*ViewModel$
クラス名を使用してコードで DataTemplate ディクショナリを構築する起動時のメソッドを検討します。
//build list
foreach ....
String.Format("<DataTemplate DataType=\"{x:Type vm:{0} }\"><v:{1} /></DataTemplate>", ...)