我想使用WPF製作簡單的動畫。我有使用拉球的帆布使用ItemTemplateSelector。如何在WPF中使用MVVM實現球移動動畫?
<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的示例。
<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實現?我怎樣才能將路徑傳遞給View?每一個想法將不勝感激。
爲什麼你試圖迫使東西,這只是應該幫助你?我不明白爲什麼有這麼多人努力去「堅持mvvm」,只是做出非常複雜的東西...... MVVM是一種幫助,一種指導方針,如果它適合你,堅持它,並將其打破打破它。對於你的問題,處理你的自定義控件中的動畫,你的視圖模型只是通知或用於檢索重要數據。動畫應該通常只有視圖依賴(但再次,如果需要,打破它):) – dowhilefor