Привязка данных с обратными вызовами свойств анимации и анимация в статическом методе - PullRequest
2 голосов
/ 29 июня 2010

Перед тем, как начать, у меня есть этот код внутри пользовательского элемента управления:

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 обновляет свойство (расположенное в той же модели представления), которое привязано к этому свойству зависимости через Xaml. Я хотел бы не использовать этот обратный вызов, но свойство не будет изменено без него.

Спасибо

1 Ответ

8 голосов
/ 29 июня 2010

Вы можете просто привести 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...