在Frame.GoBack之后,绑定到Frame的Source属性不起作用

时间:2010-08-06 10:09:18

标签: silverlight silverlight-4.0

我有三个页面,为了导航到每个页面,我将属性绑定到Frame的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);
    }

有谁知道如何解决这个问题?我尝试了几种方法,但没有什么对我有用。

提前致谢,

2 个答案:

答案 0 :(得分:0)

经过一段时间的测试,我发现了它无法正常工作的原因。问题是由于某种原因调用GoBack后,对Source属性的绑定被删除。因此,如果您想这样做,请以编程方式再次设置绑定,如下所示。

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

但你应该考虑何时再次设置绑定,否则它无法正常工作。

答案 1 :(得分:0)

我知道很久以前就问过这个问题了,而且已经有人自己回答了。我在寻找项目中完全相同问题的解决方案时遇到了这个问题。

我在GoBack()和GoForward()调用后尝试重新绑定 - 如果用户在地址栏中输入自己的路径,绑定也会中断。对我来说不幸的是它非常多。

我发现通过将Silverlight Frame上的Binding更改为Mode = TwoWay,它可以准确地解决问题并且从那时起就没有引起任何仇恨。

<sdk:Frame x:Name="ContentFrame" 
           Style="{StaticResource ContentFrameStyle}" 
           Source="{Binding CurrentPage, Source={StaticResource ViewModel}, Mode=TwoWay}" 
           Navigated="ContentFrame_Navigated" 
           NavigationFailed="ContentFrame_NavigationFailed" 
           Navigating="ContentFrame_Navigating">

我希望这也有助于其他一些穷人失去灵魂寻找解决同一问题的方法。