我继承了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();
}
}
答案 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.
}
}
使用以下方法将ViewModel连接到您的View:
this.DataContext = new MainViewModel();
使用以下命令将您的命令连接到按钮:
<Button content="Next view" Command="{Binding NextViewCommand}"/>
我认为这是最好的方式,并帮助你。