1

我继承了一个 Sketchflow 原型 WPF 应用程序。我正在向 UI 添加功能。

目前,从屏幕到屏幕的导航在 XAML 中定义为如下事件:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
    <pi:NavigateToScreenAction TargetScreen="WpfPrototype1Screens.Screen_1_2"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

这可行,但问题是它不允许我在导航到新屏幕之前验证用户输入。

我想知道的是,如何从 C# 中按钮的单击事件处理程序中以编程方式导航到新屏幕?

例如:

private void Button1_Click_1(object sender, RoutedEventArgs e)
{
    if (userInputValid)
    {
        NavigateToScreen_1_2();
    }
}
4

1 回答 1

2

这在很大程度上取决于如何使用下一个屏幕。如果它是插入到应用程序另一部分的 UserControl(视图),可以说是 ContentControl,那么您只需将 Content 控件的内容更改为新屏幕即可。

结合MVVM查看WPF 中的 Commands。这可以帮助您解决问题。您可以在 Views ViewModel 中定义一个执行函数,而不是使用 OnClick 事件,并拥有一个可以绑定到按钮 Command 属性的公共属性

像这样。

有一个简单的类:

public class MainViewModel
{
    public MainViewModel()
    {
        NextViewCommand = new DelegateCommand(NextView);
    }

    public ICommand NextViewCommand {get;set;}
    public UserControl NewView {get;set;}

    public void NextView()
    {
         NewView = new UserControl() //set your NewView property to your new usercontrol 
         //Apply validation on all your binded properties you want to validate.
    }
}

委托命令

使用以下方法将 ViewModel 连接到您的视图:

this.DataContext = new MainViewModel();

并使用以下命令将您的命令连接到您的按钮:

<Button content="Next view" Command="{Binding NextViewCommand}"/>

我认为这是最好的方法,并且可以帮助您。

于 2013-04-29T07:21:04.990 回答