在viewmodel中通过按钮命令导航

时间:2017-07-31 11:28:40

标签: wpf xaml

我有一个带有两个页面的WPF应用程序,现在我想在单击第一页的按钮时导航到另一个页面(我在第一页中编写了按钮命令),但逻辑应该是通过视图模型。怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

你真的不提供任何code。但我认为您的导航背后是您的代码。您可以通过绑定Command OneWayToSource来完成此操作。

<强> XAML

<local:MainWindow x:Class="WpfNameSpace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfNameSpace"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
        mc:Ignorable="d"
        NavigatePageCommand="{Binding Path=MyViewModel.NavigateCommand, Mode=OneWayToSource}"
        Title="MainWindow" Height="600" Width="800">
    <Grid>

    </Grid>
</local:MainWindow>

请查看local:MainWindow

<强> C#

public partial class MainWindow : Window
{
    public ICommand NavigatePageCommand
    {
        get { return (ICommand) GetValue(NavigatePageCommandProperty); }
        set { SetValue(NavigatePageCommandProperty, value); }
    }

    // Using a DependencyProperty as the backing store for NavigatePageCommand.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty NavigatePageCommandProperty =
        DependencyProperty.Register("NavigatePageCommand", typeof(ICommand), typeof(MainWindow),
            new PropertyMetadata(0));

    public MainWindow()
    {
        InitializeComponent();
        NavigatePageCommand = new RelayCommand(Navigate);

    }

    public void Navigate()
    {
        //Do Navigation here
    }

}

我假设您熟悉CommandsViewModelsBindings并且您明白了这一点。

答案 1 :(得分:0)

当我编写需要导航到不同页面的WPF应用程序时,我喜欢使用Rachel Lim's method来使用DataTemplates和ViewModels来实现它。你可以点击她页面的链接来获得解决方案的确切代码,但我会在这里给出她的方法的一些摘要。

在她的方法中,她创建了一个代表应用程序的ViewModel,并且有一个名为 CurrentPage 的属性,它包含一个ViewModel。然后,您可以在 ApplicationViewModel 上创建一个名为 ChangePage 的命令。此命令将采用作为参数传递的ViewModel并将其设置为 CurrentPage

xaml负责切换正确的视图。使用此方法时,我将ContentControl放在 MainWindow 中,并将Content属性绑定到 ApplicationViewModel.CurrentPage 。然后在 MainWindow 的资源中,创建DataTemplates以告诉视图“当我尝试显示 ViewModel时,将那个视图放在画面”。