J'ai un problème avec AutoCompleteBox. Je voulais l'utiliser comme combobox modifiable. J'ai donc créé un contrôle personnalisé héritant de AutoCompletBox et ajouté deux propriétés de dépendances nommées SelectedValue (pour la liaison à DataContext) et SelectedValuePath. Lorsque l'utilisateur sélectionne un élément, mon contrôle personnalisé met à jour SelectedValue de la manière suivante:Silverlight, réinitialisation AutoCompleteBox.SelectedItem à null
string propertyPath = this.SelectedValuePath;
PropertyInfo propertyInfo = this.SelectedItem.GetType().GetProperty(propertyPath);
object propertyValue = propertyInfo.GetValue(this.SelectedItem, null);
this.SelectedValue = propertyValue;
Cela fonctionne. Inversement, lorsque le contexte de données sous-jacent est modifié, SelectedValue est également modifié; donc SelectedItem du contrôle personnalisé doit également changer:
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;
}
}
}
Ce qui me gêne, c'est lorsque SelectedValue est null. Même si SelectedItem est défini sur null, la propriété Text n'est pas effacée si elle a été modifiée manuellement par l'utilisateur. Donc SelectedItem = null mais AutoCompleteBox affiche un texte entré manuellement. Quelqu'un peut-il me montrer la bonne façon de réinitialiser la propriété AutoCompleteBox.SelectedItem?
En fait, le code ci-dessus provient de AutoCompleteComboBox; voir: http://www.codeproject.com/KB/silverlight/AutoComplete_ComboBox.aspx – synergetic