【问题标题】:Prevent user from typing certain char in TextBox防止用户在 TextBox 中输入某些字符
【发布时间】:2013-04-30 00:43:57
【问题描述】:

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

【问题讨论】:

    标签: wpf textbox mvvm-light


    【解决方案1】:

    如果代码隐藏仅与您的视图相关,则使用 MVVM 完全可以使用代码隐藏。

    因此,如果您有一些特定于视图的逻辑表示 “用户只能在此框中键入数字”,那么为 TextBox 编写一个 KeyPress 事件是完全可以的允许处理数字键。你甚至可以把它扔进UserControl,这样它就可以重复使用了。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多