2011-01-04 17 views
2

に私は私の最初のSilverlight 4アプリケーションを開発していますし、根本的に、ユーザーコントロールに私のMainPage.xamlをトップの要素(グリッド)に設定された私のDataContextを共有する方法に苦労しています、タイプセーフな方法で。 DataContextは、私のViewModelクラスのインスタンスであり、私の考えは、ViewModelのプロパティにUserControlの特定の要素をバインドできるようにすることです。共有のDataContextタイプ安全な方法

ViewModelオブジェクトが私のUserControlに吹き飛ばすのは間違いないと思いますが、UserControlではどのようにDataContextがPatternCreatorViewModel型であるかを確認できますか?

これはわかりました。

+0

なぜあなたはそれにしたいですか?その質問に対する答えを慎重に考えてください。 – AnthonyWJones

答えて

5

これは何の型の安全性はどこかのプロセスでもありませんということ、すなわち、(私の孤独な意見で)SilverlightとWPFでモデルをデータバインディングの最大の限界の一つです。 {Binding ...}とタイプすると、ネットなしで作業しています。 MSはC#のような素晴らしく強く型付けされた言語を取って、それを完全に非型安全なデータバインディングモデルに結びつけました。その結果、Anders HejlsbergのC#に関する10年の素晴らしい仕事が壊れました。動的言語を使って作業するときは、このような「緩み」があると思いますが、C#を扱っているときはそうではありません。あなたのビューの基礎となるのViewModelを変更しているとき

この制限は本当にもちろん、あなたのデータバインディングをテストする簡単な方法はありませんので、問題となります。通常、テストできないコードがあるときは、コンパイラに依存して、コードの実行に何か意味をなさないかどうかを伝えることができます。しかし、MSはデータ・バインドを非型安全にしているので、変更をテストできないだけでなく、コンパイル時には意味をなさないタイミングを伝えることができません。また、怪我を招くようなことを加えるために、アプリケーションの実行やエラーメッセージの表示に頼ることさえできません。なぜなら、バインディングは常に黙って失敗するからです。あなたができることは、ロギングレベルを上げ、たくさんのデバッグエラーメッセージを調べることです。 Uggh。地獄のように厄介。

ブログの投稿hereをご覧ください。もう1つの質問hereと私の質問hereに根本的な問題があります。

私はこの1についての私の意見では、事実上一人であるように見えることに注意しなければならないので、多分私はちょうど欠けているという巨大な何かがあります。しかし、私は個人的に頭の上で釘を打ったと思います。

+0

私は、タイプセーフなAPIとXamlの構文がどのようなものになるか興味がありますか? – AnthonyWJones

+0

私はいくつかの考えを与えましたが、明らかに十分ではありません:-)。私の疑惑は、C#のジェネリックスのように動作するということです。 XAMLでオブジェクトを宣言すると、というバインドが必要な型を指定します。型チェックが必要ない場合は、その属性を空白のままにしておきますが、指定すると、データコンテキストに割り当てられているオブジェクトがすべてその型のインスタンスであることが確認され、指定したデータバインディングはそのタイプで動作することを確認する必要があります。 –

+2

あなたは一人ではありません:P同じバージョンのEntity Frameworksインクルードパスがあります - 少なくとも最新バージョンで修正されています。だから、いつかWPFでのバインドもより良くなるでしょう...(もちろん、バインディングは型保存です。DataContextの型を定義することはできず、カスタムDependencyPropertiesを操作する必要があります) – mattanja

関連する問題