0

我正在以 MVVM 模式创建一个示例 WPF 应用程序来实现母版页内容页面概念。在我的 wpf 应用程序中,我有一个 MainWindow 页面和 3 个用户控件,例如 Page1、Page2 和 Page3。

MainWindow.xaml 包含一个网格、一个堆栈面板和一个框架。

MainWindow.xaml 中的网格包含一个图像控件,堆栈面板包含一个 TextBlock 和 3 个按钮。

该框架首先按页面填充或加载,如下所示:

        // Load and show the MainWindow

        MainWindowViewModel vm = new MainWindowViewModel();
        MainWindow main = new MainWindow();
        Navigator.NavigationService = main.NavigationFrame.NavigationService;
        main.DataContext = vm;
        main.Show();

        // Load and navigate to the first page
        Page1ViewModel pagevm = new Page1ViewModel();
        Page1 p1 = new Page1();
        p1.DataContext = pagevm;
        Navigator.NavigationService.Navigate(p1);

通过使用它,我能够从 page1 导航到 page2,然后从 page2 导航到 page3。

在这里,我的问题最初是堆栈面板应该在显示 page1 和 page2 时禁用。但是,当从 page2 导航到 page3 时,这意味着每当我显示 page3 时,应该启用 MainWindow 中的堆栈面板,并且按钮只能在 page3 中执行它们的点击事件。

请让我知道这个问题的解决方案。

4

1 回答 1

0

您可以将当前页面提取到 MainWindowViewModel 并添加一个返回的属性,无论是否StackPanel启用:

MainWindowViewModel:
private Page _currentPage = null;
public Page CurrentPage
{
    get { return _currentPage; }
    set
    {
        _currentPage = value;
        Notify("CurrentPage");
        Notify("StackPanelEnabled");          
    }
}

public bool StackPanelEnabled
{
    get { return CurrentPage is Page3; }
}

Notify是引发PropertyChanged事件的辅助方法。Content将 的属性绑定FrameCurrentPage

<Frame Content="{Binding CurrentPage}"/>

用它:

Page1ViewModel pagevm = new Page1ViewModel();
Page1 p1 = new Page1();
p1.DataContext = pagevm;
vm.CurrentPage = p1;
于 2012-09-10T09:23:26.653 回答