WPF: не удается привязать к свойству зависимости в пользовательском элементе управления
Почему я не могу привязать к свойству зависимости в моем UserControl? Я вижу только строку "Test" в качестве значения по умолчанию, но привязка не выполняется в тестовом приложении. если я делаю ту же привязку в тестовом приложении в объекте textblock, чем он работает. поэтому проблема должна быть в классе myItem с зависимостью свойства.
Код:
public partial class myItem : UserControl, INotifyPropertyChanged
{
public static DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(String), typeof(myItem), new UIPropertyMetadata("Test"));
public myItem()
{
InitializeComponent();
DataContext = this;
}
public String Header
{
get
{
return (String)GetValue(HeaderProperty);
}
set
{
SetValue(HeaderProperty, value);
OnPropertyChanged("Header");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
1 ответ
Свойство зависимостей уже обрабатывает уведомления об изменениях, поэтому вам не нужно явно реализовывать INotifyPropertyChanged. Таким образом, вы можете удалить OnPropertyChanged("Header");
от сеттера
Если вы хотите вызвать функцию при изменении этого свойства, правильный способ - определить ее в свойстве Dependency:
public static DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(String), typeof(myItem), new PropertyMetadata("Test", OnHeaderChanged));
public String Header
{
get
{
return (String)GetValue(HeaderProperty);
}
set
{
SetValue(HeaderProperty, value);
}
}
private void OnHeaderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){ //do something}