2009-06-10 41 views
3

我目前正处于我的一个项目的规划阶段。WPVM应用程序的MVVM模式?

我想过为我的应用程序使用MVVM模式的可测试性,可维护性等。我只开始让我的头绕过MVVM,但有一件事我只是无法弄清楚我的计划应用。

我的应用程序旨在帮助体育教练进行锻炼计划,让他们在视觉上捕捉锻炼。这是一种运动训练师的涂料。

我已经想过如何实现不同PaintObjects(这就是我给他们打电话)我的应用程序(例如:球,播放器等),并已经找到了最方便的方式来做到这一点是写一个类DependencyProperties的数量,然后为这个类提供一个XAML-ControlTemplate。

现在,当我考虑构建我的应用程序的画图屏幕时,我想我会使用类似PaintView.xaml和PaintViewModel.cs的东西。现在的问题是,PaintViewModel如何存储PaintObjects?什么是PaintObjects呢?他们自己是ViewModels吗?他们是模特吗?他们是否有意见?

这就是我完全卡住的部分,希望得到更多有经验的MVVM用户的建议。提前致谢!

最好的问候, crischu

回答

6

保持你的虚拟机(其中should be POCOs)和视图之间的分离。您的虚拟机不应该严重依赖您的视图,因为这样会很难独立地测试它们。

所以通过它的声音,你需要在你的虚拟机中有东西来代表你的场景中的各种零碎(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的其他地方定义,和每个SceneObjectViewModel具有TopLeft属性。