题
我目前在我的一个项目的规划阶段。
我想过使用MVVM模式为我的可测性的应用程序,可维护性等我只有开始让我周围的MVVM头,但有一两件事,我就不能在我的计划应用的上下文中找出
我的应用程序的目的是让他们以可视化的拍摄练习,以帮助他们锻炼计划运动教练。它是一种涂料为运动鞋的。
我已经想过如何实现不同PaintObjects(这就是我给他们打电话)我的应用程序(例如:球,播放器等),并已经找到了最方便的方式来做到这一点是写一个类与数DependencyProperties,然后这个类供给XAML-的ControlTemplate。
现在当我想到我的构建应用程序的油漆屏幕我想我会使用类似PaintView.xaml用PaintViewModel.cs。现在的问题是如何在PaintViewModel存储PaintObjects?什么是PaintObjects呢?难道他们的ViewModels自己?他们是模特?难道他们的看法?
这就是我完全卡住thoughtwise并希望得到由更有经验的MVVM用户一些建议的一部分。由于事先!
此致 crischu
解决方案
请您的VM之间的分离(其应波苏斯)和视图。您的虚拟机应该不会对你的看法很难依赖,因为这使得它很难测试他们在隔离。
因此,通过它的声音,你需要在你的虚拟机的东西来代表您的场景(BallViewModel
,PlayerViewModel
等等)的各种点点滴滴。这些可以从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
具有Top
和Left
属性。
其他提示
您好尝试寻找此复合应用程序指导做好为WPF和Silverlight 一>
它MVVM内部的以及其他一些人......可能会有帮助。