2013-04-29 90 views
0

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

回答

0

是的,要筛选输入MVVM的方式,我会建议使用自定义控件(如掩码TextBox控件)或行为。

我最近在寻找一个很好的蒙面TextBox,从Xceed有一个免费的,你可以找到here。我不能说这个,因为我没有用过它,但我对过去使用过的其他Xceed组件感到满意。

但是我不想去第三方并包含一堆我不需要的控件,所以我最终创建了一个简单地附加到TextBox并基于FilterType过滤输入的行为。该行为非常易于创建,您只需使用PreviewTextInput事件过滤掉不需要的字符即可。

This SO Answer有许多关于如何过滤/屏蔽输入的建议和链接,如果您不熟悉创建附加行为,this example会显示如何为屏蔽文本框创建附加行为。

1

使用代码隐藏完全可以,MVVM提供的代码隐藏只与您的View有关。

所以,如果你有一些,说“用户不仅可以在此框中键入数字”视图特定的逻辑,那么它完全可以写一KeyPress事件为TextBox,只允许被处理的数字键。你甚至可以把它放入UserControl,这样它可以重用。

但是,如果你允许的字符逻辑是基于应用程序的逻辑,如“用户只能使用该字符串值app.config文件中定义的字符”,那么你会更好验证,在ViewModel。

另请注意,限制与验证不同。

如果你想验证用户的条目,那么我就这么用IDataErrorInfo从视图模型层,可能是一个与UpdateSourceTrigger=PropertyChanged模式,因此验证每一个按键后检查结合做。

如果你想限制哪些字符可键入到TextBox,那么我可能会做,从代码视图层后面,因为这是查看的功能。

相关问题