阻止用户在TextBox中键入某些char

时间:2013-04-29 14:49:33

标签: wpf textbox mvvm-light

我正在使用WPF,MVVM-Light。 在我的UI中,我有一个文本框,我想阻止用户在文本框中键入某些字符。 我知道如果我们使用代码隐藏我可以处理关键的keyPress事件,我可以通过MVVM实现吗? 我们可以使用某些行为或某些交互触发器吗?

2 个答案:

答案 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会显示如何创建附加行为一个蒙面文本框。