【发布时间】:2013-07-05 11:16:52
【问题描述】:
我正在尝试使用 WPF 制作简单的动画。我有使用 ItemTemplateSelector 绘制球的画布。
<ItemsControl ItemsSource="{Binding Path=Cells}" Name="ItemsControlCells">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="450" Height="450">
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplateSelector>
<selector:Selector CellWithBall="{StaticResource CellWithBall}"/>
</ItemsControl.ItemTemplateSelector>
</ItemsControl>
这是数据模板的示例。
<DataTemplate x:Key="CellWithBall">
<Canvas>
<Rectangle Canvas.Left="{Binding Path=Position.x}" Canvas.Top="{Binding Path=Position.y}"
Fill="{Binding Path=BallColour}" Width="{Binding Path=Size}" Height="{Binding Path=Size}"
Stroke="Black" StrokeThickness="0.1">
<Rectangle.InputBindings>
<MouseBinding Gesture="LeftClick"
Command="{Binding Path=DataContext.ClickedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
CommandParameter="{Binding}" />
</Rectangle.InputBindings>
</Rectangle>
</Canvas>
</DataTemplate>
当移动球事件触发时,模型发送到视图模型路径。路径是球必须经过的点列表。示例:在运动场单元格 (0;0) 中绘制球(意味着视图模型中的属性 Position 设置为 (0;0))。比我们想将球移动到单元格(1;1)。逻辑得到这样的路径 {(0;0),(0;1),(1;1)}。
我怎样才能实现这种不破坏 MVVM 实现的动画?如何将路径传递给视图?每一个想法都会受到赞赏。
【问题讨论】:
-
你为什么要强迫一些东西,这只是为了帮助你?我不明白为什么这么多人如此努力地“坚持使用 mvvm”并且只是制作非常复杂的东西...... MVVM 是一种帮助,一种指导,如果它适合你就坚持它,并在它更好的地方打破它打破它。对于您的问题,请在您的自定义控件中处理动画,并且您的视图模型只会收到通知或用于检索重要数据。动画通常应该只依赖于视图(但如果需要,再次打破它):)