我有一个WinForms应用程序,其中包含一些托管WPF用户控件的元素(使用ElementHost)。
我希望能够将WinForm的控件属性(Button.Enabled
)绑定到托管WPF用户控件(SearchResults.IsAccountSelected
)的自定义DependencyProperty。
是否可以将System.Windows.Forms.Binding绑定到由DependencyProperty管理的属性?
此外,由于我知道System.Windows.Forms.Binding监视INotifyPropertyChanged.PropertyChanged
事件 - 由DependencyProperty支持的属性是否会自动触发这些事件,或者我是否必须手动实现和管理PropertyChanged事件的发送?
答案 0 :(得分: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是一种更好的方法。当然也有例外。