在静态方法中使用依赖项属性回调和动画进行数据绑定

时间:2010-06-29 16:41:12

标签: silverlight data-binding windows-phone-7

在开始之前,我在自定义用户控件中有这个代码:

private DependencyProperty _rotation = DependencyProperty.Register("Rotation", typeof(double), typeof(MyControl),
                                       new PropertyMetadata(new PropertyChangedCallback(RotationPropertyChanged)));
    public double Rotation
    {
        get { return (double)GetValue(_rotation); }
        set { SetValue(_rotation, value); }
    }
    public static void RotationPropertyChanged(DependencyObject obj, System.Windows.DependencyPropertyChangedEventArgs e)
    {
        //How can I start Animation, as I'm in a Static method?
    }

属性设置正确,我的RotationPropertyChanged函数也被正确调用。如您所见,我在该方法中的评论是我的问题。由于这个处理程序需要是静态的(VS告诉我),如何访问非静态内容,例如故事板,以便我可以开始动画?

详细说明数据绑定:

My Viewmodel正在更新属性(位于同一个viewmodel中),该属性通过Xaml数据绑定到此依赖项属性。我希望我没有必要使用这个回调,但没有它就不会更改属性。

由于

1 个答案:

答案 0 :(得分:8)

您可以将传递给静态事件处理程序的DependencyObject强制转换为您的控件类型,然后在其上调用实例方法。我认为这是一个非常常见的模式,在Silverlight / WPF中具有依赖属性:

private DependencyProperty _rotation = DependencyProperty.Register(
    "Rotation",
    typeof(double), 
    typeof(MyControl),
    new PropertyMetadata(new PropertyChangedCallback(RotationPropertyChanged)));

public double Rotation
{
    get { return (double)GetValue(_rotation); }
    set { SetValue(_rotation, value); }
}

public static void RotationPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
    ((MyControl)obj).RotationPropertyChanged(e);
}

private void RotationPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    // Start your animation, this is now an instance method
}