【问题标题】:WPF: Routing usercontrol command to MainwindowWPF:将用户控制命令路由到主窗口
【发布时间】:2014-10-21 06:31:11
【问题描述】:

我必须承认我无法理解 wpf 的工作方式。我的 Mainwindow 中嵌套了一个用户控件 BottomControl。如果单击底部控件中的按钮,我希望主窗口中发生某些更改(例如更改文本框的内容)。

很容易做的事情显然是在 Click_Event 中调用一个公共过程,但这不是很优雅。我已经使用了 RoutedCommands。

public static readonly RoutedCommand BottomGridReSize = new RoutedCommand();

在用户控件的 XAML 中

<Button Style="{StaticResource TransparentButton}" Command="{x:Static local:Commands.BottomGridReSize}" >

在主窗口的代码中

        void BottomGridReSize_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }

    void BottomGridReSize_Executed(object sender, ExecutedRoutedEventArgs e)
       {
          \\Do some stuff
       }

显然 Mainwindow 不能使用这些事件,因为 ist 无法识别它们。我错过了什么?

任何帮助将不胜感激

乔恩

【问题讨论】:

  • 如果您使用 Command,请尝试将一些 CommandBinding 添加到 Window.CommandBindings 集合中。

标签: c# wpf xaml command routedcommand


【解决方案1】:

仅出于我的理解:您有一个带有按钮的 BottomControl,当单击该按钮时,您的主窗口中应该会发生一些事情。那么为什么不简单地在您的 BottomControl 中创建一个 ICommand 类型的 DependencyProperty 并将其绑定到 Button。如果你这样做,你可以简单地将 MainViewmodel 的命令绑定到这个 DP。

   <uc:BottomControl MyDPCommand="{Binding MyMainViewmodelCommand}" />

【讨论】:

  • 嗨,John,您是否考虑过实现 MVVM 模式而不是采用代码隐藏路线?通过这种方式,您可以实现 ICommand 接口并将所有命令方法都放在视图模型中。
  • @Hardgraf:我对 WPF 的现状非常满意。我先尝试了 MVVM,但很快就放弃了。
  • @blindmeis:这似乎是要走的路。我明天试试。
  • @JonBlumfield,看看我的博客:wpffromscratch.wordpress.com/2014/07/10/… 我写了一个完整的初学者 MVVM 演练,它会带你逐步完成一个简单的项目。我也自学了,真的很难找到一个基本的例子,所以写了这个。干杯
  • @Hardgraf:谢谢。我去看看。
猜你喜欢
  • 2016-02-08
  • 2010-09-26
  • 2021-04-17
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多