C# 如何正确地将正则表达式应用于文本框,以便无法使用MVVM WPF键入不需要的字符
当通过WPF使用正则表达式来限制文本框中可以键入的字符时,我很难获得期望的结果。目前我有一个相当标准的Xaml文本框C# 如何正确地将正则表达式应用于文本框,以便无法使用MVVM WPF键入不需要的字符,c#,regex,wpf,xaml,mvvm,C#,Regex,Wpf,Xaml,Mvvm,当通过WPF使用正则表达式来限制文本框中可以键入的字符时,我很难获得期望的结果。目前我有一个相当标准的Xaml文本框 <TextBox x:Name="txtRegistration" Text="{Binding Registration,UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding RegistrationIsEnabled}" Horizon
<TextBox x:Name="txtRegistration"
Text="{Binding Registration,UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding RegistrationIsEnabled}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
Height="Auto"
Width="Auto"
VerticalAlignment="Center"/>
我应该指出,我的viewmodel实现了MVVMLight版本的ViewModelBase
我期待在这里发生的事情:
regex.IsMatch
函数将不会找到冲突字符,因此跳转到else语句,在该语句中,字段将以正常值更新并传递回文本框regex.IsMatch
函数将发现冲突字符,因此不会用新值更新字段。文本框将使用在用户尝试输入非数字字符之前为属性保留的值进行更新,从而有效地阻止他们输入非数字字符谢谢 如果指定一个临时字符串来保存原始值,然后将其设置为_registration,然后以个人方式激活inotifypropertychangedp,我会在ViewModel中使用Implemente IDataErrorInfo。您可以测试任何用户客户端设置等,然后您可以向用户提供反馈,说明其输入无效的原因等。尝试类似AttachedProperty的属性并将AttachedProperty值绑定到模型中的字符串正则表达式怎么样?这将阻止字符输入、动态正则表达式值,并且对于出现的任何其他情况都是可重用的。如何分配一个临时字符串来保存原始值,然后将其设置为_registration,然后以个人方式触发InotifyPropertyChangedP,我将在ViewModel中使用implement IDataErrorInfo。您可以测试任何用户客户端设置等,然后您可以向用户提供反馈,说明其输入无效的原因等。尝试类似AttachedProperty的属性并将AttachedProperty值绑定到模型中的字符串正则表达式怎么样?这将防止字符输入、动态正则表达式值,并且对于出现的任何其他情况都是可重用的。
private string _registration;
public string Registration
{
get { return _registration; }
set
{
if (System.Text.RegularExpressions.Regex.IsMatch(value, "[^0-9]", System.Text.RegularExpressions.RegexOptions.Singleline))
{
}
else
{
_registration = value;
}
RaisePropertyChanged("Registration");
}
}