我有一个5页的WPF应用程序。在我的主窗口,我有5个按钮。我想要做的是单击按钮1在主窗口的框架中打开第1页。我不想使用导航窗口。我应该使用某种绑定吗?我想使用xmal,代码越少越好。在此先感谢我,我正处于学习阶段!
答案 0 :(得分:3)
您可以设置按钮“Click”事件处理程序,使用各自的页面调用Frame.Navigate(Uri)。
在XAML中:
<Frame Name="myFrame"/>
<Button Name="buttonPage1" Click="OnClickPage1">
Page1
</Button>
然后在后面的代码中:
void OnClickPage1(object sender, RoutedEventArgs e)
{
myFrame.Navigate(new Uri("page1"));
}
答案 1 :(得分:1)
我认为你评论的逻辑后续是按下按钮2将打开第2页等。
我的建议,这适用于所有WPF开发,是采用MVVM。它将为您提供更多的灵活性和可测试性。
在MVVM中实现您的问题:
为每个视图创建ViewModel,为主窗口创建一个
每个ViewModel都成为其各自View的DataContext。
在MainWindowViewModel中实现5个ICommand属性,并将按钮上的Command属性绑定到MainWindowViewModel上的每个相应ICommand属性。
在主窗口上,我不确定您是否正在实现Frame控件,但我建议使用ContentControl,将控件上的Content属性绑定到MainWindowViewModel上Object类型的某些属性。
在执行每个ICommand对象时,您可以将MainWindowViewModel上的content属性设置为该按钮的匹配ViewModel。
在MainWindowView.xaml中,您需要实现一系列将ViewModel映射到View的DataTemplate:
<DataTemplate DataType="{x:Type Page1ViewModel}">
<AdornerDecorator>
<views:Page1View DataContext="{Binding}"/>
</AdornerDecorator>
</DataTemplate>
我建议您使用众多可用的MVVM框架之一。
MVVMFoundation - 重量轻,最低限度的实施
MVVMLight - 更重的框架
Caliburn - 似乎有很多其他功能
实现一个完整的框架似乎需要做很多额外的工作,但从长远来看,它是值得的,更可测试,更易于维护。