Привязка к исходному свойству Frame не работает после Frame.GoBack - PullRequest
0 голосов
/ 06 августа 2010

У меня есть три страницы, и для перехода к каждой странице я привязываю свойство к свойству Source фрейма.Это работает довольно хорошо, если я просто перемещаюсь по страницам в обычном режиме, но после вызова метода GoBack, Frame внезапно перестал работать.Если я устанавливаю uri для свойства Source напрямую, а не для привязки, он работает нормально, хотя на самом деле я использую MVVM, поэтому я не хочу устанавливать свойство Source напрямую.

- xaml-

  <navigation:Frame x:Name="_frame" Source="{Binding CurrentPage}"/>

- Код позади -

    Uri _currentPage;
    public Uri CurrentPage
    {
        get { return _currentPage; }
        set
        {
            _currentPage = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("CurrentPage"));
        }
    }

    // back
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if ( _frame.CanGoBack)
            _frame.GoBack();
    }

    // test1
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        CurrentPage = new Uri("/TestPage1.xaml", UriKind.Relative);
    }

    // test2
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        CurrentPage = new Uri("/TestPage2.xaml", UriKind.Relative);
    }

    // test3
    private void Button_Click_3(object sender, RoutedEventArgs e)
    {
        CurrentPage = new Uri("/TestPage3.xaml", UriKind.Relative);
    }

Кто-нибудь знает, как обойти эту проблему?Я пробовал несколько способов, но у меня ничего не работает.

Заранее спасибо,
Yoo

Ответы [ 2 ]

0 голосов
/ 14 августа 2012

Мне известно, что этот вопрос задавался давным-давно, и на него уже отвечали вы сами.Я столкнулся с этим вопросом, когда искал решение точно такой же проблемы в моем проекте.

Я попытался повторно привязать после вызовов GoBack () и GoForward () - привязка также прерывается, если пользователь вводитсобственный путь в адресной строке.К сожалению, для меня это было довольно глючно.

Я обнаружил, что, изменив привязку на рамке Silverlight на Mode = TwoWay, он точно исправил проблему и с тех пор не вызывал никаких проблем.Я надеюсь, что это также помогает какой-то другой бедной потерянной душе искать решение той же проблемы.

0 голосов
/ 06 августа 2010

После некоторого тестирования я нашел причину, по которой он не работает. Проблема заключалась в том, что по какой-то причине привязка к свойству Source сбрасывается после вызова GoBack. Поэтому, если вы хотите сделать это, установите программную привязку снова, как показано ниже.

_frame.SetBinding(Frame.SourceProperty, new Binding() { Source = this, Path = new PropertyPath("CurrentPage") });

Но вы должны подумать, когда снова установить привязку, иначе она не будет работать правильно.

Yoo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...