كيفية استخدام الانعكاس للحصول على bindingexpression (والقيمة) لعناصر التحكم التي تحتوي على محتوى في Silverlight
-
21-09-2019 - |
سؤال
أحتاج إلى استخدام الانعكاس للحصول على قيمة الربط في عنصر تحكم هو DataGridTemplateColumn
(على سبيل المثال HyperLinkButton
). هل يعرف أحد كيف يمكنني القيام بذلك؟
يبدو الأمر بسيطًا بما يكفي للقيام بذلك باستخدام TextBlock
لأنه يحتوي TextProperty
خاصية التبعية ، لكن لا يمكنني الحصول على تعبير ملزم من عنصر تحكم ليس له فوري TextProperty
. فيما يلي الرمز الذي أستخدمه للحصول على تعبير الربط لـ TextBlock
:
FrameworkElement fe = (FrameworkElement)dependencyObj;
FieldInfo fi = fe.GetType().GetField("TextProperty");
BindingExpression bindingExpression = fe.GetBindingExpression((DependencyProperty)fi.GetValue(null))
ومع ذلك ، فإن الكود التالي لا يعمل أبدًا مع كائن التبعية الذي هو HyperLinkButton
:
FieldInfo fi = fe.GetType().GetField("ContentProperty");
هل يعرف أي شخص كيف قد أتمكن من الحصول على BindingExpression
(وقيمة الربط) لمحتوى أ HyperLinkButton
?
المحلول
هل حاولت إضافة أعلام الربط الصحيحة لهذا الحقل؟ يبدو وكأنه حالة من أعلام الربط غير الكفاءة عند استخدام الانعكاس. يحتوي TextBlock على حقل مستقر نص على TextBlock ، حيث يحتوي Kyperlinkbutton على محتوى ورث من ContentControl.
حاول استخدام أعلام الربط الثابتة والعامة والتسلسلات الإلكترونية:
FieldInfo fi = fe.GetType().GetField("ContentProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
يجب أن تخبر إضافة العلم الربط الانعكاس التسلسل المتسلية الانعكاس للبحث في التسلسل الهرمي للصف للعثور على هذا المجال الثابت العام.