无法在wpf mvvm中的框架内导航

时间:2013-12-06 22:51:07

标签: c# wpf mvvm

我在MainWindow中有一个框架。我有一个名为MainPage的网页,我正试图将其导航到another page

这是我的Xaml:

<Window x:Class="Lab_Lite.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" WindowState="Maximized">
    <DockPanel LastChildFill="True">
        <Frame  x:Name="Navigator" Source="/Lab_Lite;component/Pages/MainPage.xaml" />
    </DockPanel>
</Window>

这是我的MainPage.cs文件:

public partial class MainPage : Page
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void Tile_Click(object sender, RoutedEventArgs e)
    {
        using (Lab_Lite_Entities db = new Lab_Lite_Entities())
        {
            MainWindow test = new MainWindow();

            string pageName = (from t in db.TypePages
                               select t)
                               .Where(t => t.Value.Replace("***", Environment.NewLine) == ((Button)sender).Content)
                               .Select(t => t.AssociatedPage)
                               .FirstOrDefault();
            test.Navigator.Navigate(new Uri("Pages/" + pageName + ".xaml", UriKind.RelativeOrAbsolute));
        }
    }
}

当我调试代码时,我发现pagename具有我正在寻找的完美价值。但我无法导航。我没有收到任何错误。

2 个答案:

答案 0 :(得分:1)

我没有使用过框架导航,但似乎创建一个新的MainWindow并调用Navigate是不对的。您应该在实际存在的MainWindow上调用Navigate。

答案 1 :(得分:1)

您正在创建MainWindow的新视图,它不在视图中。 使用existing instance of MainWindow,您可以通过两种方法获得 -

如果MainWindow是startup window

MainWindow test = (MainWindow)App.Current.MainWindow;

此外,您也可以使用这种通用方法 -

MainWindow test = (MainWindow)Window.GetWindow(this);