C # делегированный метод потерял поля класса / событие потеряло поля класса - PullRequest
1 голос
/ 14 ноября 2010

Пожалуйста, помогите.

У меня есть несколько экземпляров класса Action1.Каждый из них должен переходить на разные страницы сразу после завершения анимации.

Не имеет значения, что объект «вызван», он всегда перемещается на одну и ту же страницу.

Пока я использую метод Invoke, навигация работает правильно.

Похоже, что PageAnimation_Completed постоянно вызывается в одном и том же экземпляре объекта, почему?Как решить эту проблему?

У меня есть следующий класс:

public class Action1 : TriggerAction<DependencyObject>
{
    PhoneApplicationPage page;

    protected override void OnAttached() {
        ...
        page = (PhoneApplicationPage)elem;
        ...
    }

 [System.Windows.Interactivity.CustomPropertyValueEditorAttribute(System.Windows.Interactivity.CustomPropertyValueEditor.Storyboard)]
    public Storyboard PageAnimation { get; set; }

    public static readonly DependencyProperty Message = DependencyProperty.Register("IsSpinning", typeof(Uri), typeof(Action1), null);
    public Uri Page
    {
        get { return (Uri)GetValue(Message); }
        set { SetValue(Message, value); }
    }



    protected override void Invoke(object o)
    {
        PageAnimation.Completed += new EventHandler(PageAnimation_Completed);
        PageAnimation.Begin();
    }

    void PageAnimation_Completed(object sender, EventArgs e)
    {
        page.NavigationService.Navigate(new Uri("/" + this.Page.OriginalString, UriKind.RelativeOrAbsolute));
        PageAnimation.Stop();
    }
}

1 Ответ

1 голос
/ 14 ноября 2010

Вам необходимо отписаться от события PageAnimation.Completed:

void PageAnimation_Completed(object sender, EventArgs e)
{
    PageAnimation.Completed -= PageAnimation_Completed;
    page.NavigationService.Navigate(new Uri("/" + this.Page.OriginalString, UriKind.RelativeOrAbsolute));
    PageAnimation.Stop();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...