41

Silverlight コントロールの課題の 1 つは、プロパティがコードにバインドされると、Blend で実際に編集できなくなることです。たとえば、データ フィードから入力された ListView がある場合、Blend でコントロールを編集しても要素は表示されません。

WPF 開発コミュニティによって考案された MVVM パターンも、Silverlight コントロールを "ブレンド可能" に保つのに役立つと聞いています。私はまだ頭を抱えていますが、ここにいくつかの説明があります:

潜在的な欠点の 1 つは、パターンが追加のクラスを必要とすることですが、必ずしも追加のコードではありません (上記の 2 番目のリンクで示されているように)。考え?

4

12 に答える 12

32

Silverlight アプリケーションには MVVM パターンを使用する必要があると思います。このパターンの利点の 1 つは、単純な手法を使用してアプリケーションを実際にブレンド可能にできることです。私はよく「ブレンド性」を「デザイン性のためのデザイン」と呼んでいます。特定のテクニックを使用して、アプリケーションが Blend で見栄えがするようにすることです。

Torbjørn が指摘するような手法の 1 つは、依存性注入フレームワークを使用し、コードが Blend で実行されているか、Browser で実行されているかに応じて、外部サービスのさまざまな実装を提供することです。そのため、コードが Blend で実行されているときにダミーのデータ プロバイダーを使用するようにコンテナーを構成します。これにより、リスト ボックスやデータ グリッドなどの設計時のサポートが得られます。

多くの場合、課題は DataContext を宣言的に設定する方法です。そのため、IoC コンテナーの「フロント エンド」であるサービス ロケーター クラスを使用することになります。そうすれば、データ コンテキストをサービス ロケーターのプロパティにバインドできます。

もう 1 つの手法は、Design Time DataContext と RunTime Data Context の 2 つのプロパティを持つ ObjectDataSource コントロール (非ビジュアル) を作成することです。コントロールは、実行中の場所を検出し、Parent DataContext を適切なオブジェクトに設定するジョブを実行します。

于 2008-12-19T09:21:54.293 に答える
4

あなたの質問に答えられるかどうかわかりませんが、以下の記事は非常に価値があると思います。Jonas Follesøは、デザイン/ブレンド モードでサービスを切り替えるために ninject を使用しています。非常に素晴らしい!

http://jonas.follesoe.no/YouCardRevisitedImplementingDependencyInjectionInSilverlight.aspx

于 2008-12-17T17:25:33.663 に答える
3

また、Silverlight を使用した MVVM に関しては、Jonas に同意します。MVP も良い選択だと思いますが、最近、Silverlight で MVP と MVVM の両方を試す時間があり、MVVM の結果に非常に満足しています。(はい、MVVM を使用すればするほど気が変わりました)。VM は、MVVM で (明らかに) ビューからモデルのバインディングを抽象化します。これにより、MVP よりも多くのバインディング シナリオ (少なくともそれらを行うためのよりクリーンな方法) が可能になります。ただし、それは 1 つの側面にすぎません。

私のサイトでは、Silverlight を使用した MVP と MVVM の両方の例をいくつか投稿します。

于 2009-01-08T04:35:56.590 に答える
2

私は ViewModel パターンが大好きで、強くお勧めします。私のブログには、「ViewModel 入門」タイプの投稿がいくつかあります。

于 2009-01-10T05:51:57.507 に答える
2

私はジョナスに同意します。MVVM は私にとって最もうまく機能するモデルのようです (ただし、John Papa は MVP の方が理にかなっていると考えています)。これに関する MSDN の記事が 3 月に公開されるので、良い例を求める声に応えてくれることを願っています。

ところで、MVVM フレームワーク部門である程度の結束を期待したいと思います。フレームワークが従うべき良い解決策はまだありません。私はジョナスが好きです(ジョナスはFXフレームワークだと思います)が、WPFと互換性がないため、一部の人にとっては正しい選択ではないかもしれません.

于 2008-12-27T13:07:52.957 に答える
2

私はいくつかのオプションを試しましたが、MVVM が最良の選択であると判断しました。ブレンド可能性は重要なポイントです。また、VM の側面は、動的な動作や手続き型の効果やアニメーション (Nikhil の Silverlight.FX など) を装備するのに直感的だと思います。ある時点で、流暢なインターフェイスを使用して Blend を完全に回避しようとしましたが、長期的には UI と動作の結合があまりにも苦痛であることに気付きました。Blend で UI をデザインしてから、エフェクトやその他の動作をコードに追加したいと考えています。これは、これまでのところ、従うべき最良のパターンであることが証明されています。

于 2008-12-17T20:13:59.953 に答える
2

私たちの多くは、先駆者が先に進み、Silverlight で MVVM (さらに言えば WPF) を使用して本当に優れたサンプル アプリを作成するのを待っていると思います。Silverlight に ICommand がないことや、データ バインディングのみを使用してアニメーションの開始と停止を操作することが難しいことなど、扱いにくい領域がいくつかあります。

ただし、これは間違いなく将来を見据えるパターンであり、完全に把握できない場所で時々「不正行為」を行うことを気にしない場合は、試してみる価値があります.

于 2008-12-24T23:18:08.763 に答える
1

私は最近、いくつかの異なる Silverlight プロジェクトで MVVM を使用しており、非常にうまく機能しています。絶対にお勧めします。 Jonas の投稿は、始めるのに最適な場所です。私は最近、MVVM の経験についてもブログを書き、主なタッチ ポイントをデモするための非常にシンプルなソリューションを作成しました。

于 2008-12-20T13:55:57.077 に答える
1

Techdays 2010 の非常に優れた MVVM パターンの紹介ビデオがあり、明確に説明されています。

より高度な自動テストを必要とするより複雑なアプリケーションの場合、これは間違いなく理にかなっています。また、DependencyProperties から DataContext バインディングへの移行は、ASP.NET の対応物よりもはるかに優れています。

Silverlight で私が見つけた最大の課題は、実際の UI をテストすること (これまでのところ 1 つの商用フレームワークがあると思います) と、Silverlight で WCF サービス (ま​​たは WebClient) を使用するときに発生するイベント呼び出しの巨大なもつれです。

于 2010-04-28T13:23:40.060 に答える
0

実際のプロジェクトでの MVVM と Silverlight に関する私の記事を見て、自分で判断してください。

http://alexburtsev.wordpress.com/2011/03/05/mvvm-pattern-in-silverlight-and-wpf/

于 2011-03-05T19:05:30.497 に答える
0

P&P による Prism v2 の 2009 年 2 月のリリースにより、Silverlight と WPF で利用できるようになった MVVM のサポートがさらに強化されました。詳細については、 microsoft.com/compositewpfを参照してください。

于 2009-02-22T23:52:50.783 に答える
0

私は常に、MVVM と PresntationModel http://martinfowler.com/eaaDev/PresentationModel.htmlは本質的に同じものだと考えてきました。PresentationModel の方がはるかに簡単です。Java Swing、Windows フォーム、WPF、Silverlight で使用して成功しました。関心の分離という観点から考えると、プレゼンテーション モデルは非常に理にかなっています。プレゼンテーションに適したモデルを提供することだけに関心があるクラスが 1 つあります。それを画面に表示するためにどのテクノロジを使用するかは問題ではありません。一部の実装の詳細が変更される可能性がありますが、情報をどのように表示するかに関係なく、懸念事項を分割することをお勧めします。このように分離されているため、ビュー テクノロジに関係なく、プレゼンテーション モデルに対するテストを簡単に作成できます。それはプラスです。

于 2008-12-20T14:13:10.753 に答える