我正在使用WPF,MVVM-Light。 在我的UI中,我有一个文本框,我想阻止用户在文本框中键入某些字符。 我知道如果我们使用代码隐藏我可以处理关键的keyPress事件,我可以通过MVVM实现吗? 我们可以使用某些行为或某些交互触发器吗?
答案 0 :(得分:1)
使用代码隐藏完全没问题,MVVM提供的代码隐藏只与您的View相关。
因此,如果你有一些特定于视图的逻辑,说“用户只能在这个框中键入数字”,那么为{{1}写一个KeyPress
事件是完全可以的。只允许处理数字键。您甚至可以将其投入TextBox
,以便可以重复使用。
但是,如果允许的字符逻辑基于应用程序逻辑,例如“用户只能使用app.config文件中定义的字符来获取此字符串值”,那么你会更好在ViewModel中验证它。
另请注意,限制与验证不同。
如果你想验证用户的条目,那么我会使用ViewModel层中的UserControl
,并且可能使用IDataErrorInfo
模式进行绑定,这样每次按键后都会检查验证。
如果你想限制可以在UpdateSourceTrigger=PropertyChanged
中键入哪些字符,那么我可能会从后面的代码中的View层执行此操作,因为这是一个功能图。
答案 1 :(得分:0)
是的,要过滤输入MVVM方式,我建议使用自定义控件(例如屏蔽TextBox
控件)或行为。
我最近正在寻找一个好的蒙面TextBox
,并且Xceed有一个免费的,你可以找到here。我无法与这个人说话,因为我还没有使用它,但我对我过去使用的其他Xceed组件感到满意。
但是我不想参加第三方并且包含一些我不需要的控件,所以我最终创建了一个简单地附加到TextBox
并过滤输入的行为基于FilterType。这种行为很容易创建,您只需使用PreviewTextInput
事件过滤掉您不想要的字符。
This SO Answer有许多建议和指向如何过滤/屏蔽输入的链接,如果您不熟悉创建附加行为,this example会显示如何创建附加行为一个蒙面文本框。