WPF/XAMLデザイナに依存関係のあるカスタムクラスを使用するにはどうすればよいですか?

WPFアプリケーションでカスタムクラスを使用して検証を行い、ValidationRuleから継承するクラスを定義しています。クラスには、実行時にAutoFacに注入する依存関係がありますが、Visual Studio 2010のXAMLデザイナでは、動作させるためにパラメータのないコンストラクタが必要です。

唯一の解決策は、依存関係のDependencyPropertyを作成してXAMLにバインドすることですが、依存関係は一般にアクセス可能で変更可能であり、どちらも必要ではありません。

XAMLで使用しようとするクラスに依存関係を渡す方法はありますか? all

  • デザイナーを壊さないでください。
  • 依存関係を非公開にします。
  • クラスが使用される前に依存関係が設定されていることを確認します。
2

2 答え

あなたはどれくらいひどくそれをしたいですか?

XAML 2009 の機能は、次の要素を提供します。

  • x:引数を使用すると、コンストラクタへの引数この引数は、あなたのビューモデルのプロパティに何らかの形でバインドできますか?

  • x:FactoryMethod では、オブジェクトを作成するメソッド。私はこれがあなたの依存関係コンテナにアクセスするあなたのウィンドウまたはユーザコントロールのメソッドであると仮定します。

But here's the problem: XAML 2009 can only be loaded at runtime via a XAML Reader, and can not be compiled. (See Can't get the new 2009 XAML primitives working, why?).

したがって、グローバルな静的オブジェクト(eurgh)は依然として痛みの少ない解決策であるかもしれません。


後で編集: I reread your question, and realised you had put "Not break the designer" as one of you requirements. This excludes XAML 2009 from the possible solutions.

2
追加された

This is an excellent question. I used techniques demosontrated here to keep the designer working: http://jonas.follesoe.no/2008/07/24/youcard-re-visited-implementing-dependency-injection-in-silverlight/

それは機能し続けるだけでなく、この技術を使用してモックをデザイナーに入れることができます。とても便利な。

2
追加された
それは特定の質問に答えないので、私から-1。 (あなたがリンクした2000年の単語のブログのどこかに答えがあるかもしれません。その場合、答えを抽出してここに置くべきです)
追加された 著者 Andrew Shepherd,
これは非常に興味深いブログ投稿です.XAMLでViewModelバインドを有効にし、依存関係を処理するためにAutoFacを取得するために同様の手法を使用しています。問題は最終的にXAMLのカスタムクラスを実際に宣言していないことです。彼はバインディング式を使用しています。私の具体例では、XAMLコレクション構文を使用してセッターのないプロパティにアイテムを追加する方法について説明しています。参照: msdn.microsoft.com/en -us/library /… ありがとうございます。
追加された 著者 andrej351,