3

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

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

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

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

4

1 回答 1

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

于 2010-06-15T07:46:34.483 回答