我有一大堆RoutedUICommand
命令,我使用XAML中的Command
属性从不同的地方开火。
他们现在都绑定在我的MainWindow.xaml
和MainWindow.xaml.cs
我的每个人都有一个处理程序。我已经这样设置了,主要是因为我用Unity解析了MainWindow
类,它接收了所有必要的依赖项(即域服务等)。如果我将命令绑定到UserControl,我就不会在那里提供这些服务,而且给UserContext的UserControl似乎也是错误的,但是允许它操纵它或其他上下文。
我的问题:这看起来是对的吗?对我来说,在一个中心位置处理所有命令,尤其是后面的主窗口代码,似乎有些不了解。
我是WPF的新手,无法判断这是对还是错。任何建议都表示赞赏。
答案 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。
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/