ComboBox SelectedValue через Reflection в качестве DependencyProperty - PullRequest
0 голосов
/ 15 декабря 2010

Мне нужно получить свойство SelectedValue комбинированного списка Silverlight 4 в качестве DependencyPproerty через Reflection, но я не уверен, как это сделать.

myComboBox.GetType().GetFields()

возвращает DependencyProperties, но возвращаются только четыре свойства ComboBox, и SelectedValue не является одним из них.

myComboBox.GetType().GetProperty("SelectedValue") 

получает свойство, но это System.Object, а не DependencyObject.

В конечном итоге я пытаюсь получить привязки для элемента управления, для которого требуется свойство DependencyProperty, а не объект.

Edit:

Это происходит в поведении, и я не знаю, что это за элемент управления, сейчас я работаю с элементом управления ComboBox. Все, что у меня есть, это строка, переданная из XAML. В WPF я мог бы использовать mySource="{x:Static ComboBox.SelectedValueProperty}" в качестве свойства DependencyProperty, но Silverlight не имеет x:Static в XAML. Поэтому я пытаюсь преобразовать mySource="SelectedValue" в DependencyProperty.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Это у вас работает?

myComboBox.GetValue(ComboBox.SelectedValueProperty);

- EDIT -

Чтобы получить DependencyProperty из любого типа Control, используйте следующий код:

DependencyProperty property = control.GetType().GetField(propertyName + "Property",
            BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(control) as DependencyProperty;

BindingExpression bindingExpression = control.GetBindingExpression(property);

// Use bindingExpression.ParentBinding

- РЕДАКТИРОВАТЬ 2 -

Следующий код работает для меня в Silverlight 4 Application:

Control control = new ComboBox();
String propertyName = "SelectedValue";

DependencyProperty property = control.GetType().GetField(propertyName + "Property",
        BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(control) as DependencyProperty;

BindingExpression bindingExpression = control.GetBindingExpression(property); 
// bindingExpression will be null since we just created a `ComboBox`. It does not have any bindings yet.
0 голосов
/ 15 декабря 2010

Свойство фактически называется SelectedValueProperty, но если вы пытаетесь получить привязки для элемента управления, попробуйте это ...

BindingExpression expression = myComboBox.GetBindingExpression(ComboBox.SelectedValueProperty);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...