should be POCOs
因此,听上去,你需要在虚拟机中使用一些东西来表示场景中的各个部分(
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假设您的
在其他地方定义了,并且每个
SceneObjectViewModel
有一个
Top
和
Left
所有物