Silverlight 4.0 如何:在Silverlight 4中设置MVVM ViewModel属性的动画?
我想问,如果可能的话,如何在Silverlight中为MVVM viewmodel上的属性设置动画。例如,这里我有一个典型的XAML脚本声明:Silverlight 4.0 如何:在Silverlight 4中设置MVVM ViewModel属性的动画?,silverlight-4.0,mvvm,Silverlight 4.0,Mvvm,我想问,如果可能的话,如何在Silverlight中为MVVM viewmodel上的属性设置动画。例如,这里我有一个典型的XAML脚本声明: <DoubleAnimation Storyboard.TargetName="yearSlider" Storyboard.TargetProperty="Value" From="1990" To="2012" Durat
<DoubleAnimation
Storyboard.TargetName="yearSlider"
Storyboard.TargetProperty="Value"
From="1990" To="2012" Duration="0:0:8" />
现在,假设不在Slider yearSlider上设置Value属性的动画,而是在MVVM viewmodel上设置CLR(非依赖项)属性“Year”的动画。例如,如果将my viewmodel设置为DataContext,则代码可能假设如下所示:
<DoubleAnimation
Storyboard.BindingSource="{Binding}"
Storyboard.TargetProperty="Year"
From="1990" To="2012" Duration="0:0:8" />
当然,故事板上没有这样的“BindingSource”属性,但这应该有助于说明我正在尝试做什么
Silverlight 4中是否有任何机制可以完成为MVVM viewmodel属性设置动画的任务,而无需在代码隐藏中添加代码?是。你可以这样做
MVVM中的属性必须是依赖项属性,而不是普通属性。因此,您的MVVM必须从DependencyObject继承,然后您可以创建一个可以设置动画的dependency属性
public class MyViewModel : DependencyObject
{
public static readonly DependencyProperty YearProperty =
DependencyProperty.Register(
"Year", typeof(int),
typeof(MyViewModel), null
);
public int Year
{
get { return (int)GetValue(YearProperty); }
set { SetValue(YearProperty, value); }
}
}
然后您的XAML将如下所示:
<DoubleAnimation
Storyboard.Target="{Binding}"
Storyboard.TargetProperty="Year"
From="1990" To="2012" Duration="0:0:8" />
试试看,让我知道它是否有效
如果没有,请尝试摆弄它,直到找到如何使用DoubleAnimation满足绑定。也许您可以在范围内利用另一个元素:
<TextBlock x:Name="YearLabel" Text="{Binding Year}" />
<DoubleAnimation
Storyboard.TargetName="YearLabel"
Storyboard.TargetProperty="DataContext.Year"
From="1990" To="2012" Duration="0:0:8" />
注意我们是如何修改“DataContext.Year”的。它不必是文本块。可以是具有名称的任何元素。。。例如,与RootLayout网格类似。能否显示XAML的外观,即显示DoubleAnimation声明?设置属性目标时,出现以下错误:错误1 XML命名空间“”中类型“DoubleAnimation”上不存在属性“Target”。添加了另一种绑定方法。动画可能会特别敏感,因此您可能需要尝试不同的技术才能获得实际的视图模型。感谢您提供的信息。我很感激你的尝试,所以我把你的答案投了赞成票。不幸的是,我正在寻找一个优雅的解决方案,它完全按照指定的方式工作,而不是为了实现这一点而四处摆弄或进行涉及绑定到其他UIElement的黑客操作。