.net 如何使用MVVM在WPF中实现球移动动画?

.net 如何使用MVVM在WPF中实现球移动动画?,.net,wpf,animation,mvvm,.net,Wpf,Animation,Mvvm,我正在尝试使用WPF制作简单的动画。我有使用ItemTemplateSelector绘制的带有球的画布 这是DataTemplate的示例 <DataTemplate x:Key="CellWithBall"> <Canvas> <Rectangle Canvas.Left="{Binding Path=Position.x}" Canvas.Top="{Binding Path=Position.y}"

我正在尝试使用WPF制作简单的动画。我有使用ItemTemplateSelector绘制的带有球的画布

这是DataTemplate的示例

  <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表示视图模型中的属性位置设置为0;0然后我们要把球移到第1单元;1.逻辑获取如下路径{0;0,0;1,1;1}


如何在不破坏MVVM实现的情况下实现这种动画?如何传递路径以查看?任何想法都将受到赞赏

如果您使用的是MVVM,我假设您在某处有一个ViewModelVM。现在,让我们称之为“CellAnimatorVM”。无论如何,假设您的ItemsView将位于窗口中,您希望将该窗口的DataContext设置为您的CellAnimatorVM类

 <Window.DataContext>
        <local:CellAnimatorVM/>
 </Window.DataContext>
这会让你上钩的

仅供参考:INotifyPropertyChanged的简单实现如下:

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string prop)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}

#endregion

你为什么要强迫别人做一些本该帮你的事?我不明白为什么这么多人如此努力地坚持使用mvvm,只是制作非常复杂的东西。。。MVVM是一个帮助,一个指南,如果它适合你,就坚持它,在最好的地方打破它。对于您的问题,请在自定义控件中处理动画,您的viewmodel将被通知或用于检索重要数据。动画通常应仅依赖于视图,但如果必要,请再次打断它:Curtis,你说得对。这是我真正的密码。VM是DataContext和OnPropertyChaneged,用于更新视图。但问题在于动画。我只是从来没有做过动画。只是最简单的任务。所以我不知道该使用什么控件或其他什么@DOWHILEFO建议创建自定义控件。好主意很快就会尝试。那么,您是只是自动移动单元格,还是根据用户单击的内容移动单元格?如果要自动移动它们,WPF会内置动画。如果在用户单击某个对象时移动它,那么您仍然可以使用WPF在一段时间内从点A到点B设置动画,并且它会这样做。这里有一个关于如何制作动画的博客链接。
private Position _position;

public Position Position
{
   get{ return _position;}
   set
   {
      _position = value;
      OnPropertyChanged("Position");
   }
}
#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string prop)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}

#endregion