我有一个带有两个页面的WPF应用程序,现在我想在单击第一页的按钮时导航到另一个页面(我在第一页中编写了按钮命令),但逻辑应该是通过视图模型。怎么做到这一点?
答案 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
}
}
我假设您熟悉Commands
,ViewModels
和Bindings
并且您明白了这一点。
答案 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时,将那个视图放在画面”。