使用MVVM更改Windows存储应用程序中的框架

时间:2015-12-18 21:02:49

标签: c# wpf mvvm windows-store-apps

我用c#创建一个Windows应用商店应用。在我的MainPage里面我有一个框架。我的按钮绑定到RelayCommand,当用户单击该按钮时,该框架应更改AddMovie框架。为什么不改变框架?我的框架绑定到我的viewmodel中的Frame属性。

 private Frame _frame;

    public Frame Frame
    {
        get { return _frame; }
        set
        {
            _frame = value;
            OnPropertyChanged();
        }
    }

在构造函数中

   _frame = new Frame();
   NavToCommand = new RelayCommand(() =>
    {
        Frame.Navigate(typeof(AddMovie));
    });

1 个答案:

答案 0 :(得分:0)

确保您在MainPage中用于导航的框架与您的应用程序用作其当前窗口的内容相同。

通常,您不需要在MainPage中创建新框架。而是在App.xaml.cs中设置一个如下所示的方法:

    /// <summary>
    /// Invoked when the application is launched normally by the end user.  Other entry points
    /// will be used such as when the application is launched to open a specific file.
    /// </summary>
    /// <param name="e">Details about the launch request and process.</param>
    protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;

        // Do not repeat app initialization when the Window already has content,
        // just ensure that the window is active
        if (rootFrame == null)
        {
            // Create a Frame to act as the navigation context and navigate to the first page
            rootFrame = new Frame();

            rootFrame.NavigationFailed += OnNavigationFailed;

            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }

            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }

        if (e.PrelaunchActivated == false)
        {
            if (rootFrame.Content == null)
            {
                // When the navigation stack isn't restored navigate to the first page,
                // configuring the new page by passing required information as a navigation
                // parameter
                rootFrame.Navigate(typeof(MainPage), e.Arguments);
            }
            // Ensure the current window is active
            Window.Current.Activate();
        }
    }

您可以在该阶段在主页中注入rootFrame,并将其用于导航目的,而不是创建新实例。

但是,如果您想在MVVM中使用Navigation,请在此处查看如何在我的其他答案中实现NavigationService模式: https://stackoverflow.com/a/38362370/1008758