我尝试在我的WPF MVVM项目中避免代码隐藏在视图中.
但是我有一些非常具体的观点.例如,当控件获得焦点时,我希望突出显示全文(即使用户单击文本框).
在这里,我可以选择在视图模型中处理它(然后需要了解视图,我想避免它).
我还有一些其他的代码,当用户在键盘上向左或向右按下时,它会向用户界面做一些事情(他们只对视图进行更改,而不是对模型或视图模型进行更改)再次我认为最好的地方对于这些是在视图背后的代码中.
所以我问的是代码是否只影响视图(例如光标移动,选择文本框中的所有文本等等,而不是模型或视图模型,是否可以将其放在代码中,而不是比其他地方.
想知道这里的最佳做法是什么,或者是否有其他人有更好的建议在哪里放置此代码.
ken*_*n2k 20
所以我问的是代码是否只影响视图(例如光标移动,选择文本框中的所有文本等等,而不是模型或视图模型,是否可以将其放在代码中,而不是比其他地方.
不仅没关系,而且强烈鼓励.MVVM不是为了让你在ViewModels中编写成千上万条丑陋的代码行,而是为了使代码可测试并引入关注点分离.
如果它与视图完全相关(您的"焦点"示例是一个完美的示例),那么只需将其写入后面的代码中即可.
如果行为仅与UI相关,则不应将其放在ViewModel中.您给出的突出显示示例就是这种情况的一个很好的例子.话虽如此,我建议你避免重复你的代码(例如)创建一个自定义控件,当它有焦点时突出显示文本.这样,您可以在尽可能多的视图中重用控件,您的视图可以避免代码隐藏,如果您优化控制,优化就会全面发生.
编辑:
根据Ravi的回答,Behaviors也是一种引入UI相关逻辑的方法,同时让View免于代码隐藏.但是,如果您发现自己反复声明具有相同行为的相同控件,我认为最好创建一个包含该行为的控件.
话虽如此,如果所述UI逻辑在一个视图中只出现一次,您可以考虑将其置于代码隐藏中.虽然很少提前知道你不会在其他地方需要那种逻辑.
编辑:
我认为@ ken2k使用强烈的鼓励是指不把它放在我也提倡的ViewModel中.正如他所说,UI逻辑应该在View中实现.现在,有几种方法可以做到这一点.其中之一是直接在代码隐藏中编码,这可能导致重复的代码和维护问题.此外,如果您使用单元测试,它可能会让您陷入困境.第二种是将这种逻辑编码为行为,这是封装UI代码的好方法.然后,您可以对行为进行单元测试,以确保其正常工作.但是,您可以找到(正如我在许多项目中所做的那样),您已经开始使用行为标签为XAML中的每个TextBox添加胡椒.如果这种情况开始发生,我会(并且已经)创建一个'HighlightedTextBox'控件并在我的XAML中使用它.总之,我的建议与ken2k并不矛盾,但它是解决在为View放置逻辑时可能遇到的一些问题的指针.
| 归档时间: |
|
| 查看次数: |
6593 次 |
| 最近记录: |