如果元素不支持Command,是否有任何特定的方式来在MVVM中实现命令?示例如何实现TextBox的TextChanged_event ?.如果元素不支持命令,是否有任何实现MVVM命令的通用过程?
1
A
回答
0
没有必要使用TextChanged_event或SelectionchangedEvent,因为您可以使用绑定到您的ViewModel属性并等待它们的通知消息(请检查MVVMLight的助手类)来实现相同的目的。
如果你迫切需要对这些事件的处理程序,你可以试试它采用RelayCommand
的EventToCommand行为的辅助类你可以看看这个illustration和example program对信使类的细节和this example上得到清晰的画面EventToCommand行为
0
你所做的就是观察ViewModel属性集方法的变化。
的XAML会是这个样子:
<TextBox Text="{Binding Mode=TwoWay,
Path=ViewModelProperty,
UpdateSourceTrigger=PropertyChanged}" />
而且在视图模型类,你定义一个属性是这样的:
Private _ViewModelProperty As String
Public Property ViewModelProperty As String
Get
Return _ViewModelProperty
End Get
Set(ByVal value As String)
' your test for "TextChanged" goes here
If value <> _ViewModelProperty Then
_ViewModelProperty = value
OnViewModelPropertyChanged()
End If
End Set
End Property
Private Sub OnViewModelPropertyChanged()
' logic for handling changes goes here
End Sub
这有每次执行OnViewModelPropertyChanged()
您的副作用为ViewModelProperty
分配一个新值,但您可以通过分配到后台字段而不是属性来避免这种情况。
否则,你正在实现ICommand接口,它们有用;这取决于你需要获得的东西有多复杂。
相关问题
- 1. GCC是否支持命令文件
- 2. 对PRISM/MVVM具有支持命令的最小引用
- 3. 如何支持node.js命令行实用程序的插件?
- 4. 命令行是否支持键盘的printscreen键?如果是这样的命令是什么?
- 5. Silverlight命令MVVM
- 6. 击:如果(命令)|(命令)
- 7. TaskScheduler不通过命令创建任务
- 8. DDD命令模式实现细节 - 持久命令
- 9. 如何在MVVM中使用Tooltip实现命令?
- 10. 如何通过命令行
- 11. 如何通过命令
- 12. 是否有任何Windows命令来卸载应用程序?
- 13. 事件而不是MVVM中的命令?
- 14. 用于通过Oauth支持访问API的命令行工具
- 15. Selenium Webdriver - Ruby不支持的命令
- 16. 是必要的,以实现mvvm模式中的命令android
- 17. NPM通过命令行参数命令
- 18. IE6是否支持任何HTML5元素?
- 19. TFS VSO是否支持Windows Server 2003的使用命令行?
- 20. lua命令行支持线程吗?
- 21. MVVM命令绑定
- 22. WPF MVVM和命令
- 23. MVVM和Ribbon命令
- 24. 不要通过PowerShell命令
- 25. ShellExecuteEx不通过长命令
- 26. 如何使用shell命令实现MapReduce?
- 27. 如何使用Boost.Program_options实现子命令?
- 28. 如何使用CL实现`tail`命令?
- 29. 是否有任何MVVM库实现CommandSinkBinding?
- 30. 是否有任何goto命令或继续命令为If语句??? JAVA
ComboBox SelectionchangedEvent如果我想要删除的项目和添加项目? – 2010-07-08 04:40:41
为此,如果您希望MVVM模式保持“纯粹”,则必须实施ICommand。 如果你没有这个需要,也就是说,如果你没有UI设计者坚持在XAML中没有代码隐藏,那么在你的代码隐藏中实现一个SelectionChanged事件处理器,并用它来调用ViewModel的方法。 – 2010-07-08 16:51:20