Привязка к расположенному в WPF элементу управления DependencyProperty в WinForms
У меня есть приложение WinForms с некоторыми элементами, которые размещены пользовательские элементы управления WPF (с помощью ElementHost).
Я хочу иметь возможность связать свой элемент управления WinForm (Button.Enabled
) к пользовательскому DependencyProperty размещенного пользовательского элемента управления WPF (SearchResults.IsAccountSelected
).
Можно ли привязать System.Windows.Forms.Binding к свойству, управляемому DependencyProperty?
Кроме того, так как я знаю часы System.Windows.Forms.Binding для INotifyPropertyChanged.PropertyChanged
события - будет ли свойство, поддерживаемое DependencyProperty, автоматически запускать эти события, или мне придется осуществлять и управлять отправкой событий PropertyChanged вручную?
1 ответ
DependencyObject
не реализует INotifyPropertyChanged
, поэтому, если вы выберете этот маршрут, вам придется реализовать отправку событий PropertyChanged вручную.
к счастью DependencyObject
имеет OnPropertyChanged
метод, поэтому реализация INotifyPropertyChanged
в вашем DependencyObject
-приобретенный класс тривиален, например:
public class MyClass : HeaderedContentControl, INotifyPropertyChanged
{
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
var handler = PropertyChanged;
if(handler!=null) handler(this, new PropertyChangedEventArgs(e.Property.Name));
base.OnPropertyChanged(e);
}
public event PropertyChangedEventHandler PropertyChanged;
}
Я хотел бы повторить мысль jsmith о том, что привязка непосредственно к свойству UserControl может быть не лучшим путем. В большинстве случаев MVVM - лучший путь. Есть исключения, конечно.