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

本文关键字:框架 应用程序 存储 MVVM 更改 windows 使用 | 更新日期: 2023-09-27 18:27:19

我正在用c#制作一个windows商店应用程序。在我的主页中,我有一个框架。我的按钮绑定到一个RelayCommand,当用户单击按钮时,框架应该会更改AddMovie框架。为什么它不改变框架?我的框架绑定到视图模型中的frame属性。

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

在构造函数中

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

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

确保您在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注入MainPage,并将其用于导航目的,而不是创建新实例。

但是,如果您想将Navigation与MVVM一起使用,请在我的另一个答案中查看如何实现NavigationService模式:https://stackoverflow.com/a/38362370/1008758