我正在尝试使用 CommunityToolkit 中的 ObservableValidator 来实现 UI 验证,以突出显示控件并在出现错误消息时显示它们。从文档中我只能找到如何实现 ViewModel 所需的属性,而不是 Xaml 部分本身,所以我认为它应该开箱即用。我已将问题分解为一个简单的可重现项目,这里是一些代码(这当然只是为了尽可能减少开销,并且只是一个展示我的问题的示例):
查看代码(MainWindow.xaml):
<Grid x:Name="root">
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="70" Width="150"/>
</Grid>
隐藏代码(MainWindow.xaml.cs):
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
root.DataContext = new ViewModel();
}
}
public partial class ViewModel : ObservableValidator
{
[ObservableProperty]
[NotifyDataErrorInfo]
[Required(ErrorMessage = "Username cannot be empty.")]
[MinLength(2, ErrorMessage = "Provide more than 1 Character.")]
private string _name;
}
这非常简单。我错过了什么,我想要的行为真的不受支持还是我误解了什么?非常感谢您的帮助。
您需要订阅
ErrorsChanged
:
public ViewModel()
{
this.ErrorsChanged += ViewModel_ErrorsChanged;
}
private void ViewModel_ErrorsChanged(object? sender, DataErrorsChangedEventArgs e)
{
if (this.HasError is true)
{
}
}
您应该查看MVVM Toolkit 示例应用程序。它有一些带有自定义控件ValidationTextBox的示例代码,它可以自行处理错误消息。