我喜欢MVVM。 我不喜欢它,但喜欢它。 大部分是有道理的。 但是,我一直在阅读鼓励您编写大量代码的文章,以便您可以编写XAML,而不必在代码隐藏中编写任何代码。 让我举一个例子。 最近我想在我的ViewModel中将一个命令连接到一个ListView的MouseDoubleClickEvent。 我不太确定如何做到这一点。 幸运的是,Google有一切的答案。 我发现了以下文章: http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html http://sachabarber.net/?p=514 http://geekswithblogs.net/HouseOfBilz/archive/2009/08/27/adventures-in-mvvm-ndash-binding-commands-to-any-event.aspx http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/ 虽然这些解决scheme对我对命令的理解很有帮助,但还是有问题的。 上述的一些解决scheme使得WPFdevise者无法使用,因为在依赖项属性之后添加了“内部” WPFdevise者找不到它,但是CLR可以。 一些解决scheme不允许多个命令到相同的控制。 一些解决scheme不允许参数。 经过几个小时的试验后,我决定这样做: private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ListView lv = sender as ListView; MyViewModel vm = this.DataContext as MyViewModel; vm.DoSomethingCommand.Execute(lv.SelectedItem); } 那么,MVVM纯粹主义者,请告诉我这有什么问题? 我仍然可以unit testing我的命令。 这似乎很实用,但似乎违反了“ZOMG …你有代码在你的代码!!!!”的指导方针。 请分享你的想法。 提前致谢。
问题 这个答案之前已经回答了,但是已经老了,没有最新。 我在单个文件中有超过2000行代码,而且我们都知道这是不好的做法,特别是当我查看代码或添加新function时。 我想更好地组织我的代码,现在和未来。 我应该提到,我正在构build一个工具(不是一个简单的网站),其中有许多button,UI元素,拖动,下降,动作监听器/处理程序和函数在全球范围内,其中几个听众可以使用相同的function。 示例代码 $('#button1').on('click', function(e){ // Determined action. update_html(); }); … // Around 75 more of this function update_html(){ …. } … 更多示例代码 结论 我真的需要组织这个代码,以便最好的使用,而不是重复自己,并能够添加新的function,并更新旧的。 我将一个人在这个工作。 有些select器可以是100行代码,其他的是1.我看了一下require.js ,发现它有点重复性,实际上编写的代码比需要的多。 我愿意接受符合这个标准的任何可能的解决scheme,并且链接到资源/例子总是一个优点。 谢谢。
如果我们使用“MVC,MVP和MVVMdevise模式有什么区别”这个短语来searchGoogle,那么我们可能会得到一些理论上讨论MVC MVP和MVVMdevise模式之间差异的URL MVP 在无法通过数据上下文进行绑定的情况下使用。 Windows Forms就是一个很好的例子。 为了从模型中分离视图,需要演示者。 由于视图不能直接绑定到演示者,信息必须通过接口(IView)传递给视图。 MVVM 在可以通过数据上下文进行绑定的情况下使用。 为什么? 每个视图的各种IView接口被删除,这意味着更less的代码来维护。 MVVM可能的一些例子包括使用Knockout的WPF和javascript项目。 MVC 在视图和程序其余部分之间的连接不总是可用的情况下使用(并且不能有效地使用MVVM或MVP)。 这清楚地描述了Web API与发送到客户端浏览器的数据分离的情况。 微软的ASP.NET MVC是pipe理这种情况的一个很好的工具,并且提供了一个非常清晰的MVC框架 但是我还没有find一篇单独的文章,在理论上与样本代码讨论差异。 如果我得到一篇文章讨论这三种devise模式(MVC,MVP和MVVM)与代码之间的区别,那将是非常好的。 我想了解一下这三种devise模式(MVC,MVP和MVVM)实现的3个类似的CRUD应用程序的源代码。 所以我可以通过代码,了解如何为这三个devise模式(MVC,MVP和MVVM)编写代码。 所以,如果有任何这样的文章存在,讨论如何代码看起来不同的这三种devise模式(MVC,MVP和MVVM),那么请redirect我的文章。
我刚刚读完了所有的Doctrine 2文档,开始了我自己的沙箱,我了解了大部分原理,但仍然有一个问题,我找不到任何完整的解释。 什么是Proxy类? 我应该什么时候使用它们在实体上? 据我所知,代理类添加一个层,让您添加一些其他function到您的实体,但为什么使用代理,而不是在实体类中实现方法本身?
我对MVVM模式下的View和ViewModel有清晰的认识。 我打算在我的应用程序中实现MVVM模式。 我正面临一个关于模型的问题。 我有.xml文件parsing并显示在视图上的信息。 我只需要第一时间通知模型的变化。 从需求开始,我需要得到通知。 那么如何实现这个模型? 我应该在模型类中实现INotifyPropertyChanged接口吗? (我读的模型不应该实现INotifyPropertyChanged接口,因为它是特定于WPF)
在Unity中,创build一个单例游戏pipe理器的好方法是什么,它可以作为一个全局类来访问,这个静态variables会向每个拉动这些值的类都吐出相同的常量值? 那么在Unity中实现它的方法是什么? 我必须把它附加到一个游戏对象? 它可以只是在一个文件夹中,而不是在视觉上在场景中?
在WPF的MVVM模式中,处理对话框是更复杂的操作之一。 由于您的视图模型对视图没有任何了解,因此对话交stream可能很有趣。 我可以公开一个ICommand,当视图调用它时,会出现一个对话框。 有谁知道处理对话结果的好方法吗? 我正在谈论诸如MessageBox之类的Windows对话框。 我们做这件事的方法之一就是在视图模型中有一个事件,当需要对话时视图将会订阅。 public event EventHandler<MyDeleteArgs> RequiresDeleteDialog; 这是好的,但这意味着该视图需要代码,这是我想远离的东西。