1


0

DataTemplateを介して適用すると、コードビハインドなしではWPFビューが機能しないのはなぜですか?

私はMVVMを使用して大規模なWPFプロジェクトに取り組んでいます。 現在、コードビハインドを使用する範囲をまだ決定していますが、これまでのところ、まったく機能していません(WindowsのInitializeComponentを除く)。 ただし、最近、入力したDataTemplatesを使用してビューモデルにビューを適用し始めました。これらのビューは、ウィンドウなど、InitializeComponent呼び出しがないと機能しません。http://msdn.microsoft.com/en-us /magazine/dd419663.aspx[this]の記事、そうだと思いました。 DataTemplateはビューを宣言するだけです。 ビューの分離コードファイルを削除すると、ビューモデルが完全に空白になります。 そのままにすると大丈夫です。 この動作が見られる理由はありますか?

2 Answer


1


まず、重要なものを見落とす可能性があります。MVVM/ WPFを学習する際にも、この記事を頻繁に使用しました。

実際、クイック検索を実行すると、次のことが明らかになります(中継コマンドロジックの下)[強調マイン]:

_ アプリのすべてのビューには空の分離コードファイルがあります。クラスのコンストラクターでInitializeComponentを呼び出す標準の定型コードを除きます。 _

各ビューのデフォルトのコードビハインドをそのままにしながら、あなたが説明したのと同じパターンを適用してきましたが、これまでのところ順調に進んでいます。 :)

さらに:デフォルトの `InitializeComponent()`の定義をチェックアウトすると、生成されたコードに次のステートメントが含まれていることがわかります。

System.Windows.Application.LoadComponent(this、resourceLocater);

私はこれが事実であることを確認するためにテストしていませんが、その行の実行を妨げるとあなたのビューのレンダリングに影響を与えるというあなたの魂に対して金のフィドルを賭けます…​ ;)


0


djacobsonによると、私の質問で参照したJosh Smithによるソリューションでさえ、コードビハインドなしではビューをレンダリングできないため、これを実行できることを示す行は誤解を招く可能性があります。 ビューのコードビハインドを回避する唯一の方法は、ビューをUserControlにまったく配置せず、XAMLを<DataTemplate>タグ内に直接保持することです。