0

マスター ページ コンテンツ ページの概念を実装するために、MVVM パターンで 1 つのサンプル WPF アプリケーションを作成しています。私の wpf アプリケーションには、1 つの MainWindow ページがあり、Page1、Page2、および Page3 という 3 つのユーザー コントロールがあります。

MainWindow.xaml には、1 つのグリッド、1 つのスタックパネル、および 1 つのフレームが含まれています。

MainWindow.xaml の Grid には 1 つのイメージ コントロールが含まれ、stackpanel には 1 つの 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);

これを使用することで、ページ 1 からページ 2 に移動し、次にページ 2 からページ 3 に移動できます。

ここで私の問題は、最初にページ1とページ2を表示している間、スタックパネルを無効にする必要があることです。しかし、ページ 2 からページ 3 に移動している間は、ページ 3 を表示するたびに、MainWindow にあったスタック パネルを有効にする必要があり、ボタンはページ 3 でのみクリック イベントを実行できるようになります。

この問題の解決策を教えてください。

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; }
}

NotifyPropertyChangedイベントを発生させるヘルパーメソッドです。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 に答える