我在哪里处理WPF命令?

时间:2016-12-23 10:26:14

标签: wpf

我有一大堆RoutedUICommand命令,我使用XAML中的Command属性从不同的地方开火。

他们现在都绑定在我的MainWindow.xamlMainWindow.xaml.cs我的每个人都有一个处理程序。我已经这样设置了,主要是因为我用Unity解析了MainWindow类,它接收了所有必要的依赖项(即域服务等)。如果我将命令绑定到UserControl,我就不会在那里提供这些服务,而且给UserContext的UserControl似乎也是错误的,但是允许它操纵它或其他上下文。

我的问题:这看起来是对的吗?对我来说,在一个中心位置处理所有命令,尤其是后面的主窗口代码,似乎有些不了解。

我是WPF的新手,无法判断这是对还是错。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:2)

您应该在dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) /*compile('org.apache.httpcomponents:httpcore:4.4.1') { exclude group: 'org.apache.httpcomponents', module: 'httpclient' }*/ /*Button*/ //Google Analytics //Sweet Alert Dialog compile('com.google.api-client:google-api-client-android:1.22.0') compile('com.google.apis:google-api-services-script:v1-rev6-1.22.0') { exclude group: 'org.apache.httpcomponents' } /*Button*/ //Google Analytics //Sweet Alert Dialog compile 'pub.devrel:easypermissions:0.1.5' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.github.markushi:circlebutton:1.1' compile 'com.github.dmytrodanylyk.android-process-button:library:1.0.4' compile 'cn.pedant.sweetalert:library:1.3' compile 'me.spark:submitbutton:1.0.1' compile 'com.android.support:support-v4:23.4.0' compile 'com.google.firebase:firebase-messaging:9.8.0' compile 'com.google.android.gms:play-services-auth:9.8.0' compile 'com.google.android.gms:play-services-appindexing:9.8.0' testCompile 'junit:junit:4.12' compile files('libs/org.apache.http.legacy.jar') } 处理它们。 WPF应用程序中的常见模式是MVVM

  • M - 模型(即DB)
  • V - view(.xaml files)
  • VM - 设置为您查看的ViewModel的类。你应该做所有的逻辑,绑定在这里。

我建议看看一些可以简化开发的MVVM框架。

一些受欢迎的是:

答案 1 :(得分:1)

WPF提供了ICommand接口的两个实现; System.Windows.Input.RoutedCommand和System.Windows.Input.RoutedUICommand,后者是前者的子类,只是添加一个描述命令的Text属性。

但是,这些实现都不适合在视图模型中使用,因为它们从焦点元素搜索可视树,并在其CommandBindings集合中查找具有匹配的System.Windows.Input.CommandBinding对象的元素然后为此特定CommandBinding执行Execute委托。

由于命令逻辑应驻留在视图模型中,因此您不希望在视图中设置CommandBinding以将命令连接到可视元素。相反,您应该通过创建实现ICommand的类来创建自己的命令。所有MVVM库,如Prism,MvvmLight和Caliburn Micro都已经有了这样的实现。它们通常称为DelegateCommand或RelayCommand。有关命令以及如何在MVVM WPF应用程序中使用它们的更多信息,请参阅以下链接。

MVVM - 命令,RelayCommands和EventToCommand: https://msdn.microsoft.com/en-us/magazine/dn237302.aspx

处理MVVM WPF应用程序中的事件: https://blog.magnusmontin.net/2013/06/30/handling-events-in-an-mvvm-wpf-application/