类似Paint的WPF应用程序的MVVM模式?

时间:2009-06-10 13:29:04

标签: wpf mvvm paint

我目前正处于我的一个项目的规划阶段。

我考虑过将MVVM模式用于我的应用程序,以实现可测试性,可维护性等。我只是开始了解MVVM,但有一件事我在计划的应用程序的上下文中无法弄清楚

我的申请旨在通过允许他们在视觉上捕捉运动来帮助体育教练进行锻炼计划。这是一种体育训练师的油漆。

我已经考虑过如何为我的应用程序实现不同的PaintObjects(这就是我所说的)(例如:Ball,Player等),并且发现最方便的方法是编写一个带有数字的类DependencyProperties,然后为此类提供XAML-ControlTemplate。

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

这是我完全被思考的部分,并希望得到更有经验的MVVM用户的一些建议。提前谢谢!

祝你好运, crischu

2 个答案:

答案 0 :(得分:6)

在您的VM(should be POCOs)和视图之间保持分离。您的虚拟机不应该对您的视图有很强的依赖性,因为这样就很难单独测试它们。

因此,通过它的声音,你需要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已在其他地方定义,并且每个SceneObjectViewModel都有TopLeft属性。

答案 1 :(得分:0)

您好试试看Composite Application Guidence for WPF and Silverlight

它内部有MVVM以及其他一些......可能有帮助。