在WinForms中绑定到WPF托管控件的DependencyProperty

时间:2010-06-14 21:19:13

标签: c# wpf winforms data-binding elementhost

我有一个WinForms应用程序,其中包含一些托管WPF用户控件的元素(使用ElementHost)。

我希望能够将WinForm的控件属性(Button.Enabled)绑定到托管WPF用户控件(SearchResults.IsAccountSelected)的自定义DependencyProperty。

是否可以将System.Windows.Forms.Binding绑定到由DependencyProperty管理的属性?

此外,由于我知道System.Windows.Forms.Binding监视INotifyPropertyChanged.PropertyChanged事件 - 由DependencyProperty支持的属性是否会自动触发这些事件,或者我是否必须手动实现和管理PropertyChanged事件的发送?

1 个答案:

答案 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是一种更好的方法。当然也有例外。