2009-06-10 10 views
3

私は現在、私のプロジェクトの計画段階にあります。PaintのようなWPFアプリケーション用のMVVMパターン?

私は、テスト容易性、保守性などのために私のアプリケーションにMVVMパターンを使用することを考えました。私はMVVMの周りに頭を浮かべ始めましたが、私が計画している内容では分かりません応用。

私のアプリケーションは、視覚的に練習をキャプチャできるようにすることで、スポーツコーチの運動計画を支援することを目的としています。スポーツトレーナーのための一種のペイントです。

私は既に自分のアプリケーション(たとえばBall、Playerなど)のために、さまざまなPaintObjectを実装する方法を考えていました。これを行う最も便利な方法は、 DependencyPropertiesの数を取得し、このクラスにXAML-ControlTemplateを指定します。

私のアプリケーションのペイント画面を構造化することを考えると、PaintView.xamlのようなものをPaintViewModel.csと一緒に使用すると考えました。今質問は、PaintViewModelがPaintObjectをどのように格納するのですか?とにかくPaintObjectは何ですか? ViewModels自体ですか?彼らはモデルですか?彼らは見解はありますか?

私は完全に思慮深いところで、経験豊富なMVVMユーザーから助言を得ることを望んでいます。前もって感謝します!

敬具、 crischu

答えて

6

あなたのVM(should be POCOs)とビューの間で分離してください。 VMを単独でテストすることが困難になるため、ビューにハード依存関係を持たせるべきではありません。

そのサウンドでは、シーン内のさまざまなビットとピースを表現するためにVMに何かが必要です(BallViewModelPlayerViewModelなど)。これらは、SceneViewModelから露出されることがあります。

public class SceneViewModel : ViewModel 
{ 
    public ICollection<SceneObjectViewModel> SceneObjects 
    { 
     get { ... } 
    } 

    ... 
} 

public abstract class SceneObjectViewModel : ViewModel 
{ 
    ... 
} 

public class BallViewModel : SceneObjectViewModel 
{ 
    ... 
} 

次に、あなたのSceneViewは、そのコレクションに結合し、DataTemplateを使用して、各アイテムをレンダリングします:

<ItemsControl ItemsSource="{Binding SceneObjects}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Canvas.Top" Value="{Binding Top}"/> 
      <Setter Property="Canvas.Left" Value="{Binding Left}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

上記のXAMLは、あなたのDataTemplate sは他の場所で定義されていると仮定して、それぞれSceneObjectViewModelTopLeftという特性を持っています。

関連する問題