2011-04-18 24 views
3

我想问一下,如果可能的话,您是如何在Silverlight中为MVVM视图模型创建属性的动画。例如,在这里我有XAML的典型故事板声明:如何在Silverlight 4中为MVVM ViewModel属性设置动画效果?

<DoubleAnimation 
        Storyboard.TargetName="yearSlider" 
        Storyboard.TargetProperty="Value" 
        From="1990" To="2012" Duration="0:0:8" /> 

现在假设,而不是动画的滑块yearSlider Value属性,我想,而不是动画CLR(非依赖)属性“年”在我MVVM视图模型。例如,如果我的视图模型被设置到DataContext,代码可能会假设如下所示:

<DoubleAnimation 
        Storyboard.BindingSource="{Binding}" 
        Storyboard.TargetProperty="Year" 
        From="1990" To="2012" Duration="0:0:8" /> 

当然有对故事板没有这样的“BindingSource的”属性,但是这应该有助于说明我尝试去做。

Silverlight 4中是否有任何机制来完成动画MVVM viewmodel属性的这一任务,而不诉诸在代码隐藏中添加代码?

回答

4

是的。你可以这样做。

您的MVVM中的属性必须是依赖项属性,而不是普通属性。因此,您的MVVM必须从DependencyObject继承,然后您可以创建可以动画的依赖属性。

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”。它不一定是一个TextBlock。例如,可以是任何具有名称的元素,例如RootLayout网格。

+0

您能否展示XAML的外观,即显示DoubleAnimation声明? – 2011-04-19 01:42:38

+0

当我设置属性Target时,出现以下错误:错误属性'Target'在XML名称空间'http://schemas.microsoft.com/winfx/2006'类型'DoubleAnimation'上不存在/ XAML /演示”。 – 2011-04-19 16:04:35

+0

增加了另一种绑定方式。动画可能非常敏感,因此您可能需要尝试不同的技巧才能看到实际的视图模型。 – Laith 2011-04-19 21:22:49

相关问题