2010-06-14 137 views
3

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

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

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

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

+0

似乎如果你可以,将是一个严重的黑客攻击。可能不是最好的路线。 – jsmith 2010-06-14 21:48:05

+1

@jsmith - 使用绑定可能不是最好的路线?你觉得还有什么其他问题? UI是否跨线程考虑? – Reddog 2010-06-14 22:18:47

回答

1

DependencyObject没有实现INotifyPropertyChanged,所以如果你走这条路,你将必须实现的PropertyChanged事件的手动发送。

幸运DependencyObject确实有OnPropertyChanged方法,在你的DependencyObject派生类等等实现INotifyPropertyChanged是微不足道的,例如:

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的思想直接绑定到控件属性可能不是最好的路线。在大多数情况下,MVVM是更好的方法。当然也有例外。