2012-02-21 13 views
0

私はMVVMデザインパターンを守ってWPFアプリケーションを作成しています。このアプリケーションには、さまざまなカテゴリに分割されたさまざまな教育モジュールがあり、ユーザーによって実行されます。モジュールは、階層メニューに編成されています。私のViewModelにはMenuPageViewModelというクラスがあり、レンダリングに必要な情報がMenuNodeに公開されています。もちろん、メニューツリーの終点要素には、ユーザーに表示したい内容があります。このコンテンツは、さまざまな種類のモジュールの1つになります。現在、ユーザーがメニュー内のモジュールを選択すると、大きい条件ブロックを使用して、どのタイプのViewModelをMenuItemのコンテンツプロパティのタイプに基づいて表示するかを決めることができません。たとえば...大規模な条件を避けて適切なViewModelを選択する

if (CurrentlySelectedMenuItem.Content is Lesson) 
       return new LessonViewModel(CurrentlySelectedMenuItem.Content as Lesson); 
if (CurrentlySelectedMenuItem.Content is SkillsCheck) 
       return new SkillsCheckViewModel(CurrentlySelectedMenuItem.Content as SkillsCheck); 

誰かが私をよりエレガントで保守的なアプローチへのヒントを与えることができますか?今、新しいモジュールタイプを追加すると、この条件ブロックを更新することを忘れてはなりません。

ありがとうございました。

答えて

0

Unity/Prismを使用している場合は、オブジェクトを解決するためにコンテナを使用するのが私の好みです。 strObjectTypeはあなたが

あなたがUnityに使用していない場合は、その後、反射が両方と

Activator.CreateInstance(strObjectType) as BaseViewModel; 

に動作します(例:「LessionViewModel」)を作成したいクラスの型を文字列である

_container.Resolve(Type.GetType(strObjectType)) as BaseViewModel; 

あなたはあなたのmenuItemにクラス型の文字列を持つ必要があります。

第3の選択肢は、ファクトリを持つことですが、おそらくその中に条件付きの状況が発生するか、今説明したコードが含まれています。

関連する問題