#c# #wpf
#c# #wpf
Вопрос:
Я пытаюсь добавить свойство, которое может быть прикреплено к любому элементу управления и привязать к нему значение.
public class ValidationBorder : DependencyObject
{
public static readonly DependencyProperty HasErrorProperty =
DependencyProperty.Register(
"HasError",
typeof(bool?),
typeof(UIElement),
new PropertyMetadata(default(Boolean))
);
public bool? HasError
{
get { return (bool?) GetValue(HasErrorProperty); }
set { SetValue(HasErrorProperty, value);}
}
public static void SetHasError(UIElement element, Boolean value)
{
element.SetValue(HasErrorProperty, value);
}
public static Boolean GetHasError(UIElement element)
{
return (Boolean)element.GetValue(HasErrorProperty);
}
}
Мое использование:
<TextBox Text="{Binding SelectedFrequencyManual, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center"
attached:ValidationBorder.HasError="{Binding Path=DataOutOfRange}">
</TextBox>
Когда я запускаю проект, он отображает ошибку (переведено):
Привязка не может быть указана в свойстве setHasError текстового поля. В DependencyProperty объекта DependencyObject может быть указана только привязка
Что с этим может быть не так?
Я перепробовал все, что смог найти в Интернете:
- Добавьте скобки в привязку
- Добавить RelativeSource
- Изменить
DependencyProperty.Register
наDependencyProperty.RegisterAttached
- Различные типы для
typeof(UIElement)
, включаяtypeof(TextBox)
Комментарии:
1.
typeof(UIElement)
неверно, это должно бытьtypeof(ValidationBorder)
2. Для прикрепленного свойства вы действительно
RegisterAttached()
используете метод .
Ответ №1:
Попробуйте эту реализацию:
public class ValidationBorder
{
public static readonly DependencyProperty HasErrorProperty =
DependencyProperty.RegisterAttached(
"HasError",
typeof(bool?),
typeof(ValidationBorder),
new PropertyMetadata(default(bool?))
);
public static void SetHasError(UIElement element, bool? value)
{
element.SetValue(HasErrorProperty, value);
}
public static bool? GetHasError(UIElement element)
{
return (bool?)element.GetValue(HasErrorProperty);
}
}
Вы должны вызвать RegisterAttached
и установить тип владельца на ValidationBorder
. Также удалите HasError
свойство. Пожалуйста, обратитесь к документам для получения дополнительной информации.