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