ملزمة لـ WPF استضافة Control التبعية في WinForms
-
27-09-2019 - |
سؤال
لدي تطبيق WinForms مع بعض العناصر التي يتم استضافتها عناصر التحكم في مستخدم WPF (باستخدام ElementHost).
أريد أن أكون قادرًا على ربط خاصية التحكم في WinForm (Button.Enabled
) إلى تبعية مخصصة لعناية مستخدم WPF المستضافة (SearchResults.IsAccountSelected
).
هل من الممكن ربط نظام.
أيضًا ، بما أنني أعرف system.windows.forms.binding الساعات INotifyPropertyChanged.PropertyChanged
الأحداث - هل ستطلق الممتلكات المدعومة من قبل التبعية تلقائيًا هذه الأحداث أو هل سيتعين علي تنفيذ وإدارة إرسال الأحداث المخصصة للممتلكات يدويًا؟
المحلول
DependencyObject
لا تنفذ INotifyPropertyChanged
, ، لذلك إذا كنت تأخذ هذا المسار ، فسيتعين عليك تنفيذ إرسال الأحداث المخصصة للممتلكات يدويًا.
لحسن الحظ 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 طريقة أفضل للذهاب. هناك استثناءات، بالطبع.