【问题标题】:wpf button clickwpf按钮点击
【发布时间】:2011-07-08 10:26:56
【问题描述】:

我有一个 5 页的 WPF 应用程序。在我的主窗口上,我有 5 个按钮。我想做的是单击按钮 1 在主窗口的框架中打开第 1 页。我不想使用导航窗口。我应该使用某种绑定吗?我想用xmal,代码越少越好。在此先感谢我正在学习阶段!

【问题讨论】:

    标签: wpf button click


    【解决方案1】:

    您可以将按钮的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"));
    }
    

    【讨论】:

      【解决方案2】:

      我认为您的 cmets 的逻辑后续是按下按钮 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 - 似乎有很多附加功能

      实现一个完整的框架可能看起来需要做很多额外的工作,但从长远来看,这将是值得的,更可测试,更可维护。

      【讨论】:

      • 感谢您的详细解答。我将不得不研究 MVVM 模式以更好地理解您的想法。
      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多