Wpf 命令参数引用MVVM模式中的视图控件的方式是否正确?
我正在使用MVVM模式制作一个页面 顺便说一下,我在执行命令时遇到了一个问题。 它是“向UI控件发送命令参数是否正确” 例如,我有一个文本框控件。当LostFocus事件被激发时,将引发一个绑定了TextBox的验证命令,我将发送一个UI控件作为命令参数,以显示验证失败消息 执行命令后,如果验证失败,我将更改UI控件的内容值 这是我的设想 但我知道viewmodel不应该直接引用任何视图及其控件Wpf 命令参数引用MVVM模式中的视图控件的方式是否正确?,wpf,mvvm,command,Wpf,Mvvm,Command,我正在使用MVVM模式制作一个页面 顺便说一下,我在执行命令时遇到了一个问题。 它是“向UI控件发送命令参数是否正确” 例如,我有一个文本框控件。当LostFocus事件被激发时,将引发一个绑定了TextBox的验证命令,我将发送一个UI控件作为命令参数,以显示验证失败消息 执行命令后,如果验证失败,我将更改UI控件的内容值 这是我的设想 但我知道viewmodel不应该直接引用任何视图及其控件 请告诉我怎么做 如果在视图/控件的代码隐藏中评估验证,则可以发送或传递控件 我不得不质疑在UI层进行
请告诉我怎么做 如果在视图/控件的代码隐藏中评估验证,则可以发送或传递控件 我不得不质疑在UI层进行的是什么样的验证——它可以是一般的输入逻辑(如仅数字或某些字母等),但不应该涉及任何业务逻辑。您的代码隐藏可以调用viewmodel上的方法来执行基于业务逻辑的验证,但它应该避免传递控件
如果您只是在寻找一种方法来为多个控件创建通用的验证方法,那么您应该考虑另一种方式,例如:
- 创建具有验证的自定义usercontrol
- 使用附加行为
如果您只是在寻找一种方法来为多个控件创建通用的验证方法,那么您应该考虑另一种方式,例如:
- 创建具有验证的自定义usercontrol
- 使用附加行为
- 视图模型不应该对任何UI控件(如
文本框)有任何引用或依赖关系
而不是将对文本框的引用作为命令参数传递给视图模型命令,您应该将TextBox
的Text
属性的值作为string
参数传递,或者更好的是,您应该将TextBox
的Text
属性绑定到视图模型的string
源属性:
<TextBox Text="{Binding YourViewModelProperty}" />
这就是MVVM模式的实现方式。视图模型不应该对任何UI控件(如文本框)有任何引用或依赖关系
而不是将对文本框的引用作为命令参数传递给视图模型命令,您应该将TextBox
的Text
属性的值作为string
参数传递,或者更好的是,您应该将TextBox
的Text
属性绑定到视图模型的string
源属性:
<TextBox Text="{Binding YourViewModelProperty}" />
这就是MVVM模式的实现方式。要进行验证,可以使用“IDataErrorInfo”或“INotifyDataErrorInfo”接口。这些交互与MVVM模式配合得很好。请看一下这篇教程:你可以看看我的问题,也许它会帮助你:为了验证,你可以使用“IDataErrorInfo”或“INotifyDataErrorInfo”界面。这些交互与MVVM模式配合得很好。请看一下这篇教程:你可以看看我的问题,也许它会对你有帮助:谢谢你善意的回答。谢谢你善意的回答。谢谢你善意的回答。谢谢你善意的回答。谢谢你善意的回答。