- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不久前,我开始为 WPF 编写一个对接库(类似于 Avalon)。当时我的目标是使用 MVVM 方式进行学习。为了让事情顺利进行,我决定首先设计 View 和模型部分,并认为稍后我会在两者之间加入一些 View 模型。现在我完成了所有 View 和模型的工作: View 获取模型并直接与它对话,而模型公开一系列事件以盲目地通知它们的监听器。此外,它的每个视觉方面都可以在 XAML 中重新设置样式/模板。一切都很好。现在我被困在 View 模型部分。
由于这种库的性质(内容会发生变化并动态重新创建),仍有很多代码需要在 View 的代码隐藏部分中编写,我并没有真正看到必须这样做的好处还为每个 View 编写一堆 View 模型类。可能在几个地方使用一些绑定(bind)/命令会很方便,但我真的不认为它可以弥补完成纯 MVVM 设计所需的所有重构。
我确实了解 MVVM 设计的优点并且我非常喜欢它,但在这种情况下,我看不到 View 模型如何为整个事物增加任何值(value)。
任何想法、建议或更正将不胜感激。
提前致谢。
最佳答案
这里的部分问题是您正在有效地制作一个控件库 - 因此,您正在开发的东西完全是 MVVM 中“ View ”的一部分。虽然您可能可以强制使用 MVVM 风格的“模型”来解决此问题,但它可能会混淆您的代码。
请记住,MVVM 旨在将特定于应用程序的逻辑和数据桥接到 View - 但在这种情况下,您的“逻辑和数据”就是 View 本身,因为您正在编写控件库。将 View 与模型分离在这里没有多大意义——因为模型实际上已经是 View 的一部分。
我并不是说干净地分离关注点没有值(value),但在这种情况下,从 MVVM 的角度考虑这一点可能不太合适。 Model 与 View 没有分离,试图将其完全分离并在其间添加另一层抽象可能会增加复杂性而无济于事。
如果您正在制作自定义控件库,目标不应该是使用 MVVM 编写它,而是要确保您的控件在 MVVM 应用程序中使用时可以进行清理。这通常意味着确保您的控件都为所有内容和设置公开适当的依赖属性,并确保它们与数据绑定(bind)等一起干净地工作。事实上,通常不需要事件,至少不需要那么多,并且具有单独的“模型类”层次结构会妨碍您的用户 - 用户希望能够将您的控件放入并直接绑定(bind)到该控件上的属性,这几乎可以保证您的控件将有代码。
仅仅因为您正在使用 WPF 或 Silverlight 就自动假定 MVVM 是合适的,这是一种谬误。 MVVM 适用于某些类型的应用程序,但控件(或控件库)不一定是其中之一。
关于wpf - 我真的需要 MVVM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956839/
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Why can't Python handle true/false values as I expect?
我是不是遗漏了什么或者这是 ruby 中的错误? a = %w(foo bar baz) a.include? "foo" # => true a.size == 3
从 Modelica 文档来看,注释 Evaluate 似乎只对参数有影响: https://build.openmodelica.org/Documentation/ModelicaReferenc
为了避免嵌套的 if 语句并提高可读性,我想创建一个switch(true){ ... } Coldfusion 中的声明。我在 php 中经常使用这个,但是当我在 Coldfusion 中尝试这个时
嗨,我正在尝试处理 ajax json 响应 这是我的代码 success: function (j) { switch(true) { case (j.cho
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
这个问题在这里已经有了答案: How can I return pivot table output in MySQL? (10 个答案) 关闭 5 年前。 我正在尝试构建一个以唯一列值作为列名的表
我制作了一个简单的 JDialog,其中包含一个标签和一个按钮,它基本上相当于信息对话框。所以在对话框中,有一个方法 display() 我在其中调用了 setVisible(true) 五次。 据我
在 bash 4.2.8(1)-release (x86_64-pc-linux-gnu) 在 Ubuntu 11.04 上这个命令 [ $(wc -l /var/www/some.log|cut -
我正在使用 c 语言进行并发处理,我有一个进程池。为此,我让每个 child 都在一个 While (True) 循环中。为了杀死 child ,我正在使用一个全局变量和一个信号处理程序来修改它来打破
我正在尝试选择填写了字段的数据库条目。数据库有两种插入数据的方式,一种输入评论,一种不输入,我希望只选择填写了评论的行。 $requete = "SELECT * FROM daysoff WHER
如何在 JavaMail session 中setDebug(true) 捕获流并在我的日志记录框架中使用它? (缺少下载源代码,更改接受流作为参数的方法,重新编译它,...) 更一般地说,Java
我是 JavaScript 的新手,我刚刚发现了我无法理解的奇怪行为: var magicVar = Math.sin; magicVar == true; // it returns false m
对此感到困惑。 在两台服务器上运行相同版本的 MySQL。 (从完全相同的 rpm 构建)- 沿线的某个地方,一些开发人员改变了一些东西...... 服务器 1: mysql> select ( no
我在查看 OpenSSL 中使用的一些预处理器宏时,从 crypto/stack/safestack.h 中发现了以下内容: #define CHECKED_STACK_OF(type, p) \
所以我遇到了一个问题,我的正则表达式看起来像这样:/true|false/。 当我检查单词 falsee 时,我从这个正则表达式中得到一个 true,有没有办法将它限制为确切的 true 或 fals
我正在对这个恶意 JavaScript 行进行一些试验:var undefined = true; JavaScript 中每个未初始化的变量都有 undefined 的值,这只是一个保存特殊值 'u
我想将 PHP 的微时间存储为我在 MySQL 中的时间戳。 我去过told最好用 DECIMAL 存储它,但我找不到理想的大小。 有谁知道 microtime(true) 返回的最大大小是多少,所以
在 PHP 中,当您在 URL 中包含诸如“var=true”之类的内容时,URL 中的“true”和“false”是否被转换为 boolean 变量,或者它们是否等于文本“true”还是“假”?例如
我是一名优秀的程序员,十分优秀!