📅  最后修改于: 2023-12-03 14:58:50.915000             🧑  作者: Mango
本文介绍如何在 WPF 应用程序中验证预览输入的数字,并提供一些代码示例来帮助您实现此功能。
WPF 中的 InputBindings 可以帮助我们在不使用事件处理程序的情况下处理用户输入。您可以将数字键与特定的 Command 绑定,然后处理该 Command 的执行。
首先,我们需要添加一个 TextBlock 控件,用于显示数字:
<TextBlock x:Name="NumberDisplay" Text="0" FontSize="24" Padding="10" />
然后,在 XAML 中添加 InputBinding:
<Window.InputBindings>
<KeyBinding Key="Add" Command="{Binding IncreaseNumberCommand}" />
<KeyBinding Key="Subtract" Command="{Binding DecreaseNumberCommand}" />
</Window.InputBindings>
我们将数字增加和减少分别绑定到了 IncreaseNumberCommand 和 DecreaseNumberCommand。
接下来,我们需要在视图模型中实现这两个 Command:
private int _number = 0;
public int Number
{
get { return _number; }
set { SetProperty(ref _number, value); }
}
public ICommand IncreaseNumberCommand { get; }
public ICommand DecreaseNumberCommand { get; }
public MainViewModel()
{
IncreaseNumberCommand = new DelegateCommand(() => Number++);
DecreaseNumberCommand = new DelegateCommand(() => Number--);
}
最后,在视图中使用绑定将 Number 属性和 TextBlock 控件绑定在一起:
<TextBlock x:Name="NumberDisplay" Text="{Binding Number}" FontSize="24" Padding="10" />
另一种方法是使用 PreviewTextInput 事件来处理用户输入。在这种情况下,我们可以验证输入是否为数字并防止用户输入非数字字符。
首先,我们需要添加一个 TextBox 控件:
<TextBox x:Name="NumberInput" PreviewTextInput="NumberInput_OnPreviewTextInput" />
然后,在代码中实现 PreviewTextInput 事件处理程序以验证用户输入:
private void NumberInput_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
int number;
if(int.TryParse(e.Text, out number))
{
// 允许数字输入
}
else
{
// 防止非数字输入
e.Handled = true;
}
}
这会防止用户输入非数字字符。
最后一种方法是使用 IDataErrorInfo 接口来验证输入。这个方法可以让您处理更复杂的验证逻辑,并返回验证错误消息。
首先,我们需要在视图模型中实现 IDataErrorInfo 接口:
public class MainViewModel : INotifyPropertyChanged, IDataErrorInfo
{
private int _number = 0;
public int Number
{
get { return _number; }
set { SetProperty(ref _number, value); }
}
public string this[string propertyName]
{
get
{
if(propertyName == nameof(Number))
{
if(Number < 0 || Number > 100)
{
return "数字必须在 0 到 100 之间。";
}
}
return null;
}
}
public string Error { get; }
}
在这个视图模型中,我们实现了 IDataErrorInfo 接口,并使用属性验证确保输入数字在 0 和 100 之间。
然后,在视图中使用绑定将 Number 属性和 TextBox 控件绑定在一起:
<TextBox x:Name="NumberInput" Text="{Binding Number, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<TextBlock x:Name="NumberError" Text="{Binding Path=(Validation.Errors)[0].ErrorContent, ElementName=NumberInput}" Foreground="Red" />
在这个例子中,我们使用 ValidatesOnDataErrors=True 来启用数据验证,并使用 Validation.Errors 属性提供的错误消息将 NumberError TextBlock 控件绑定到 TextBox 控件。
这样,当用户输入数字时,它会受到属性验证器的保护,并且在用户输入不正确的数字时会显示错误消息。
本文介绍了三种方法来验证用户输入数字,并提供了相应的代码示例供参考。您可以根据自己的需求选择其中一种方法来实现您的 WPF 应用程序。