WPF按钮点击

4

我有一个包含5个页面的WPF应用程序。在我的主窗口上,我有5个按钮。我想做的是点击按钮1,在主窗口上的一个框架中打开页面1。我不想使用导航窗口。我应该使用某种绑定吗?我想使用xaml,代码越少越好。提前感谢,我还处于学习阶段!

2个回答

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

我理解你的评论的逻辑延伸是按下按钮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 - 似乎具有许多其他功能

实现完整框架可能看起来需要更多额外工作,但从长远来看是值得的,更易于测试、更易于维护。


1
谢谢您详细的回答。我需要学习MVVM模式来更好地理解您的想法。 - Betsy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接