Ошибка проверки не будет отображаться, если я перенесу Binding через свойство Dependency в пользовательский элемент управления.
DETAIL
У меня есть модель просмотра, в которой всегда есть ошибка проверки на одномсвойство
class ViewModel : IDataErrorInfo
{
public string Value { get; set; }
public string Error
{
get { return null; }
}
public string this[string columnName]
{
get { return "Error"; }
}
}
и TextBox
в поле зрения
<TextBox
Text="{Binding Value,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True,
NotifyOnValidationError=True}" />
, поэтому оно будет окружено красной рамкой.
Затем я создал пользовательский элемент управления с именем WrappedTextBox
, который содержит Text
Свойство зависимости
class WrappedTextBox : Control
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(
"Text",
typeof(string),
typeof(WrappedTextBox));
}
и шаблон
<Style TargetType="local:WrappedTextBox">
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:WrappedTextBox">
<Grid>
<AdornerDecorator>
<TextBox
Text="{Binding Text,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True,
NotifyOnValidationError=True,
RelativeSource={RelativeSource Mode=TemplatedParent}}" />
</AdornerDecorator>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
для отображения
<local:WrappedTextBox
Text="{Binding Value,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True,
NotifyOnValidationError=True}" />
, как показано на рисунке выше, второй элемент управления не имеет красной границы.
, если я не уберу Validation.ErrorTemplate
из WrappedTextBox
, это будет
Как отобразить шаблон ошибки на TextBox
внутри WrappedTextBox
?