正如这里所说:
“如果你今天在谷歌搜索”MVVM和Flex“,那么第一篇文章就是那些声称MVVM不适合Flex的人。我不能不同意。开箱即用,Flex框架使得实现Presentation Model比在Silverlight中类似的MVVM实现更容易。这并不是说没有好的第三方库使Silverlight更容易,但没有任何帮助,它更容易做到Flex。“
因此MVVM作为LOGICAL CONCEPT可以在两者中实现,但在Silverlight中实现的方式需要比Flex更多的管道。
什么阻止Silverlight MVVM像Flex一样实现? Silverlight在事件系统中是否具有相同的功能?
如果是,为什么Silverlight做的事情更复杂呢?是否使用更强类型的类接口?
还有哪些缺点?例如,对于1个View-Model实现MULTIPLE VIEWS,Flex实现是否也更明显?
答案 0 :(得分:1)
有两件事,真的让它更复杂:
您在Silverlight中可以做的一件事是使用"Property Weaver"。它将执行类似于Flex中[Binding]
标记的操作,因为它将自动获取公共getter / setter并使用INPC模式重新编写它们。
至于命令,DelegateCommand
中的包装方法证明是很多管道。有几种方法可以解决这个问题。我喜欢基于约定的方法,您可以在其中声明名为Execute_Something
的公共方法,并自动创建命令Something
以供您绑定。 Here和Here。
最后,Flex中的绑定是基于表达式的,而Silverlight中的绑定纯粹是声明性的。我有一些想法,当我们得到C#v.Next时,我们可以很容易地进行基于表达式的绑定。
答案 1 :(得分:1)
<。>在.net silverlight / wpf中一切都应该是透明的。绑定是通知机制,所以它应该“至少”像事件基础系统一样。什么阻止Silverlight MVVM像Flex一样实现?
如果是,为什么Silverlight会做事情 更复杂的是什么优点 那么?
对我来说,这是关于心态,如果我知道它是一个事件基础系统,那么我应该小心使用它。不要过度使用它等等。
案例:绑定转换器,易于在flex中实现,而不是在silverlight中。
在flex中:text="{getColor(pm.customerName)}"
是的,这很简单,但问题是你确定你的PM会被垃圾收集正确发布,因为它是一个事件基础系统,负责观察变化吗? getColor
方法?还是text
财产?或两者?真的很难知道。
在silverlight中:text="{Binding CustmerName, Converter={StaticResources nameToColorConverter}}"
我不需要问谁有责任观察,因为colorConverter只是绑定支持的转换器。我不需要担心内存泄漏。
所以,对我而言,这完全是关于心态的。