3

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

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

我的应用程序旨在通过让运动教练直观地捕捉练习来帮助他们制定锻炼计划。这是一种供运动教练使用的涂料。

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

现在,当我考虑构建应用程序的绘制屏幕时,我想我会使用 PaintView.xaml 之类的东西和 PaintViewModel.cs。现在的问题是 PaintViewModel 是如何存储 PaintObjects 的?PaintObjects到底是什么?它们是 ViewModel 本身吗?他们是模特吗?他们是观点吗?

这就是我完全陷入深思熟虑的部分,并希望从更有经验的 MVVM 用户那里获得一些建议。提前致谢!

最好的问候,克里斯楚

4

2 回答 2

6

在您的 VM(应该是 POCO)和视图之间保持分离。你的虚拟机不应该对你的视图有硬依赖,因为这使得单独测试它们变得困难。

所以从它的声音来看,你需要在你的虚拟机中使用一些东西来代表你的场景中的各种点点滴滴(BallViewModel等等PlayerViewModel)。这些可能从 a 暴露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都有一个TopandLeft属性。

于 2009-06-10T14:12:06.747 回答
0

嗨,请尝试查看WPF 和 Silverlight 的复合应用程序指南

它里面有 MVVM 以及其他一些......可能会有所帮助。

于 2009-06-10T14:15:31.653 回答