我目前在我的一个项目的规划阶段。

我想过使用MVVM模式为我的可测性的应用程序,可维护性等我只有开始让我周围的MVVM头,但有一两件事,我就不能在我的计划应用的上下文中找出

我的应用程序的目的是让他们以可视化的拍摄练习,以帮助他们锻炼计划运动教练。它是一种涂料为运动鞋的。

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

现在当我想到我的构建应用程序的油漆屏幕我想我会使用类似PaintView.xaml用PaintViewModel.cs。现在的问题是如何在PaintViewModel存储PaintObjects?什么是PaintObjects呢?难道他们的ViewModels自己?他们是模特?难道他们的看法?

这就是我完全卡住thoughtwise并希望得到由更有经验的MVVM用户一些建议的一部分。由于事先!

此致 crischu

有帮助吗?

解决方案

请您的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假设你的DataTemplates在别处定义的,并且每个SceneObjectViewModel具有TopLeft属性。

scroll top