У меня проблема с AutoCompleteBox. Я хотел использовать его как редактируемый combobox. Поэтому я создал настраиваемый элемент управления, наследующий от AutoCompletBox, и добавил два свойства зависимостей, названных как SelectedValue (для привязки к DataContext) и SelectedValuePath. Когда пользователь выбирает элемент, мои пользовательские контрольные обновления SelectedValue выполняются следующим образом:Silverlight, сбросив AutoCompleteBox.SelectedItem на null
string propertyPath = this.SelectedValuePath;
PropertyInfo propertyInfo = this.SelectedItem.GetType().GetProperty(propertyPath);
object propertyValue = propertyInfo.GetValue(this.SelectedItem, null);
this.SelectedValue = propertyValue;
Это работает.
С другой стороны, когда базовый datacontext изменен, SelectedValue также изменяется; так SelectedItem пользовательского элемента управления также должен измениться:
if (this.SelectedValue == null)
{
this.SelectedItem = null; //Here's the problem!!!
}
else
{
object selectedValue = this.SelectedValue;
string propertyPath = this.SelectedValuePath;
if (selectedValue != null && !(string.IsNullOrEmpty(propertyPath)))
{
foreach (object item in this.ItemsSource)
{
PropertyInfo propertyInfo = item.GetType().GetProperty(propertyPath);
if (propertyInfo.GetValue(item, null).Equals(selectedValue))
this.SelectedItem = item;
}
}
}
Что меня беспокоит, когда SelectedValue равна нулю. Даже если для параметра SelectedItem установлено значение null, свойство Text не очищается, если оно было отредактировано пользователем вручную. Поэтому SelectedItem = null, но AutoCompleteBox отображает текст, введенный вручную. Может ли кто-нибудь показать мне правильный способ сброса свойства AutoCompleteBox.SelectedItem?
На самом деле, приведенный выше код - из автозаполненияComboBox; см.: http://www.codeproject.com/KB/silverlight/AutoComplete_ComboBox.aspx – synergetic