0

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

4

2 回答 2

1

在 MVVM 中使用代码隐藏是完全可以的,因为代码隐藏仅与您的视图相关。

因此,如果您有一些特定于视图的逻辑“用户只能在此框中键入数字”,那么为仅允许处理数字键的事件编写一个KeyPress事件是完全可以的。TextBox您甚至可以将其放入 aUserControl中,以便它可以重复使用。

但是,如果您允许的字符逻辑基于应用程序逻辑,例如“用户只能将 app.config 文件中定义的字符用于此字符串值”,那么您最好在 ViewModel 中验证它。

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

如果您想验证用户的输入,那么我会使用IDataErrorInfoViewModel 层来执行此操作,并且可能使用模式为的绑定,UpdateSourceTrigger=PropertyChanged以便在每次按键后检查验证。

如果您想限制可以在 a 中键入的字符TextBox,那么我可能会从后面代码中的 View 层执行此操作,因为这是 View 的功能。

于 2013-04-29T16:43:57.193 回答
0

是的,要以 MVVM 方式过滤输入,我建议使用自定义控件(例如屏蔽TextBox控件)或 Behavior。

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

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

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

于 2013-04-29T14:58:56.283 回答