如何在单击验证后以编程方式导航到屏幕

时间:2013-04-29 03:52:45

标签: c# wpf sketchflow

我继承了Sketchflow-prototyped 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();
    }
}

1 个答案:

答案 0 :(得分:2)

这很大程度上取决于您的下一个屏幕的使用方式。如果是在应用程序的另一部分中插入的UserControl(View),则可以说ContentControl,然后您只需将Content控件的内容更改为新屏幕。

结合Commands in WPF查看MVVM。这可以帮助您解决问题。您没有OnClick事件,而是在Views ViewModel中定义了一个执行函数,并且有一个可以绑定到按钮的公共属性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.
    }
}

DelegateCommands

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

this.DataContext = new MainViewModel();

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

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

我认为这是最好的方式,并帮助你。