![]() |
1
37
我认为错误在于纯度要求。设计模式,包括MVVM,是工具箱中的一个工具,而不是它们自身的一个终结。如果打破一个经过充分考虑的案例的模型的纯粹性更有意义(而且很明显你已经考虑过这个案例),那么就打破模型。 如果这对你有用,而且你不认为这是不适当的维护负担,那么我会说你所做的一切都没有错。我认为,尽管纯MVVM实现可能是什么,但您显然已经遇到了证明这是解决问题的合理解决方案的举证责任。 (我认为这个论点类似于多半径语言的论点。虽然可以应用纯OO方法,但有时以更实用的方式进行操作更为合适。虽然可以应用纯功能方法,但有时权衡表明OO技术的价值远远大于此。) |
![]() |
2
13
我同意你的观点,许多MVVM命令解决方案都太复杂了。就个人而言,我使用混合方法,并使用来自ViewModel的方法和属性,在视图中而不是在ViewModel中定义我的命令。 XAML:
代码(视图):
它不是纯的MVVM,但它很简单,可以工作,不需要特殊的MVVM命令类,而且它使非MVVM专家(我的同事)更容易阅读您的代码。 |
![]() |
3
10
虽然我不喜欢在使用MVVM模式时编写代码,但我认为只要代码纯粹与UI相关,就可以编写代码。 但这里并不是这样的:您从代码后面调用了一个视图模型命令,因此它不完全与用户界面相关,并且视图和视图模型命令之间的关系在XAML中并不明显。
我认为你可以很容易地在XAML中使用
attached command behavior
. 这样你就可以把
您还可以轻松访问
|
![]() |
4
5
我相信“代码背后没有代码”的目标正是这样,一个要达到的目标——而不是你应该把它当作绝对教条的东西。视图中有适当的代码位置——这不一定是一个坏例子,说明代码在何处或如何比其他方法更简单。 您列出的其他方法(包括附加属性或附加事件)的优点是它们是可重用的。当您直接挂接一个事件,然后执行您所做的操作时,很容易在整个应用程序中复制该代码。通过创建一个附加属性或事件来处理该连接,您可以在管道中添加一些额外的代码,但对于任何需要双击处理的ListView,该代码都是可重用的。 尽管如此,我倾向于使用更“纯粹”的方法。将所有的事件处理保持在视图之外可能不会影响测试场景(您特别提到的场景),但它确实会影响总体的可设计性和可维护性。通过在代码背后引入代码,您将限制您的视图始终使用有线事件处理程序的ListView,这确实将您的视图与代码绑定,并限制了设计者重新设计视图的灵活性。 |
![]() |
5
2
@jp在原始问题和@heinzi在回答中提到的是一种处理困难命令的实用方法。当您需要在调用命令之前做一点UI工作时,在代码隐藏中使用一点点事件处理代码尤其方便。 考虑OpenFileDialog的经典案例。在按钮上使用click事件、显示对话框,然后将结果发送到ViewModel上的命令,比采用MVVM工具包使用的任何复杂消息传递例程都要容易得多。 在你的XAML中:
在您的代码背后:
计算机程序设计缺乏灵活性。我们的程序员必须灵活处理这一问题。 |
![]() |
6
2
解耦是MVVM的主要特性之一。如果您想更改视图或绑定模型。你的应用程序有多简单? 举个例子,其中view1和view2共享同一个viewModel。现在,您将为这两种方法实现代码隐藏方法。 另外,假设您需要在后期更改视图的ViewModel,那么当视图模型和语句发生更改时,您的命令将失败。
将返回空值,从而导致代码崩溃。因此,更改后面的代码也会带来额外的负担。如果你这样做,就会出现这种情况。 当然,在编程中有很多方法可以实现相同的事情,但是哪一种方法是最好的将导致最好的方法。 |
![]() |
7
1
指挥是为了笨蛋。真正的男人将他们的整个用户界面连接到codebehind中的事件。 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |
![]() |
Barta · WPF MVVM不更新视图 5 月前 |
![]() |
Denis Ivanov · WPF控件在属性更改时不会更新 6 月前 |
![]() |
codymanix · WPF:TextBlock周围可见小边框? 6 月前 |
![]() |
Nostromo · 来自背景对象的工具提示 10 月前 |
![]() |
24sharon · 如果未选中复选框,Wpf将更改按钮的Visiblity 11 月前 |
![]() |
Nuvolari · 从可观测集合添加/删除时出现对象处理异常 1 年前 |
![]() |
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 1 年前 |
![]() |
Thern · 在UI线程(WPF)上的void方法中调用异步函数 1 年前 |