2011-02-08 16 views
5

に変更:検出DataContextのは、私はマルチパートの質問を持っているのSilverlight

(1)SilverlightがDataContextChangedイベントを公開しない理由を正当な理由がありますか? Microsoftの誰かがFrameworkElementクラスのinternalpublicに変更した場合(WPFと同じように)、面倒な作業を避けることができるようです。

(2)oneまたはtwoは、ある構成または別の構成でDependencyPropertiesを使用してDataContextChangedイベントにハッキングするさまざまな方法が見つかりました。しかし、私はそれらを確実に動作させることはできません。これまでの私のテストでは、ハッキングされたDataContextChangedイベントが最初のクラスで正常に起動したことを示していますが、他のクラスでは起動しません。他の誰かがその問題にぶつかっていますか?それとももっと良いことに、彼らはその周りを歩いていますか?

(3)私のDataContextがいつ変更されたかを知りたいと思っている理由は、XAMLで正しく取得するのが難しいUI操作がいくつかありますが、コードビハインドでは些細なことです。これらの事の多くは、私のViewModelで発生したイベントを処理する必要があります。したがって、ViewModelがいつ変更されたかを知る必要があるので、イベントハンドラを配線することができます。これは世界の正確な見解ですか?あるいは、私は、この種のことをコードビハインドで扱いたいと思っています。それは、私の考えが何らかの形で後ろから取り除かれているということです。私はMVVMの純粋主義者ではありません。私はここからすぐに良いコードに移行したいと思っています。コードビハインドは今10年以上にわたって私に合理的に役立ってきました。私はそれを完全に放棄するつもりです。しかし、私の実用主義はこの時点で自分自身でより困難になっていますか?

+0

私は10年以上あなたのために務めてきたコードビハインドを聞いています。 –

+2

このイベントはSilverlight 5(http://www.dotblogs.com.tw/kan/archive/2011/01/28/21097.aspx)に公開される予定ですが、今は小さな慰めです。 – RobSiklos

+0

お役立ち情報私はそれを逃した。 –

答えて

2

"しかし、私の現実主義は今この時点で自分自身で難しくなっていますか?

私はそれをプラグマティズムと呼んでいません。私はそれを変化の恐れと呼ぶだろう。あなたの快適ゾーンにいてください。あなたが古い考え方を放棄して新しいものを受け入れるならば、実際にはもっと簡単です(そして、あなたが意味することを正確に知っています - 私はコードビハインドと同じ船にいました)。今

、私のソープボックスをオフにし、より実践的な答えに:あなたはモデルの変化を検出することを可能にするイベントをフック、その後、あなたのモデルの変化を検出する場合

。 DataContextは実際のモデルではありません...あなたのモデルオブジェクトはすべて、INotifyPropertyChangedの実装を持っています。あなたは、与えられたモデルのためにそれにフックするか、ObservableCollectionのために同様のものにフックするかのいずれかでなければなりません。

Silverlight/WPFは、このようなデータをすべて簡単に作成して、データバインディングを今すぐ作成します。は実際にはになります。

フレームワークと戦わないでください。このゲームにあなたと古いASP.Netの慣行を持ち込まないでください...それはあなたを助けません。そのようにフレームワークのパワーの最良の部分を失うことになります。

乾杯。

+0

これは実際に私がやろうとしていたことです。ViewModelには、フォームに応答するためのPropertyChangedイベントとCollectionChangedイベントがいくつかあります。さまざまな理由で、ストレートXAMLではリッチテキストボックス)。しかし、私はイベントハンドラをどのように付けるべきかを知る必要があり、DataContextがいつ変更されたかを検出してそれを行うことを望んでいました。私が今行ったことは、別のInitialize()メソッドに戻ってしまうことです。私が望むほどクリーンではありませんが、機能します。 MVVMをきれいにする方法を学ぶことに感謝しています。 –

+0

私はInitialize()メソッドが完全にKenだと思います。それは基本的に私がやることです。ページが読み込まれると、_viewModel.Initialize()のようなものが呼び出されます。内部には、初期データの読み込み、フォームのドロップダウンの読み込みなどがあります。 –

+0

DataContextは、XAMLを介して一度設定してから継承することができるときに、手動で(初期化の処理を行うために)使用します。 SL5でこれをサポートしているのはその理由だと思います:-)。 –

関連する問題