如何让 WPF 错误模板在 WPF 中的 UserControl 中的控件上显示?
我有一个包含两个标签、两个文本框和一个复选框的 UserControl。其中一个文本框表示实体的名称,并绑定到由我的 ViewModel 公开的 Model 属性下的 Name 属性,该 ViewModel 是我的 Window 的 DataContext。
Model 类实现了 IDataErrorInfo 接口,并通过单元测试确认当名称为空时,属性索引器实现会返回一个错误。我已经将其绑定到 UserControl 中支持 Name TextBox 的依赖属性。当遇到验证错误时,WPF 错误模板会将红色边框放置在整个 UserControl 而不仅是 Name TextBox 上。
UserControl 对名称字段的绑定如下所示。
我有一个包含两个标签、两个文本框和一个复选框的 UserControl。其中一个文本框表示实体的名称,并绑定到由我的 ViewModel 公开的 Model 属性下的 Name 属性,该 ViewModel 是我的 Window 的 DataContext。
Model 类实现了 IDataErrorInfo 接口,并通过单元测试确认当名称为空时,属性索引器实现会返回一个错误。我已经将其绑定到 UserControl 中支持 Name TextBox 的依赖属性。当遇到验证错误时,WPF 错误模板会将红色边框放置在整个 UserControl 而不仅是 Name TextBox 上。
UserControl 对名称字段的绑定如下所示。
<vc:MyUserControl ItemName="{Binding Model.Name, ValidatesOnDataErrors=True}" />
我自定义用户控件和支持的依赖属性的简化版本如下。
<UserControl>
<Grid>
<TextBox Text="{Binding ItemName}" />
</Grid>
</UserControl>
public partial class MyUserControl: UserControl
{
public static readonly DependencyProperty ItemNameProperty =
DependencyProperty.Register(
"ItemName",
typeof(string),
typeof(MyUserControl),
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
);
public string ItemName
{
get { return (string)GetValue(ItemNameProperty); }
set { SetValue(ItemNameProperty, value); }
}
}
到目前为止,我找到的与此问题相关的信息都是关于Silverlight或使用转换器来不显示红色边框的(这对我来说没有意义)。这些信息都是在stackoverflow上找到的。
有人能够解决这个WPF问题吗?我是否忽视了一些显而易见的东西?