J'ai un listview (en mode de sélection étendu et synchronisé avec l'élément actuel) et une zone de texte. La zone de texte permet à l'utilisateur d'entrer des critères de recherche. Sur l'événement TextChanged de la zone de liste, je fais correspondre les critères de recherche avec les noms de listviewitems dans la listview et définissez l'index selected en conséquence. Ceci est à la fois mettre en évidence et fournir un point de sélection facile pour sélectionner d'autres points. Voir le code ci-dessous:Problème de sélection de la liste WPF
void searchTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
TextBox textBox = (TextBox)sender;
if (textBox != null)
{
string text = textBox.Text;
if (text != string.Empty)
{
for (int i = 0; i < listViewPerson.Items.Count; i++)
{
Person person = (Person)listViewPerson.Items[i];
if (person != null)
{
if (person .Name.StartsWith(text, StringComparison.OrdinalIgnoreCase))
{
listViewPerson.SelectedIndex = i;
listViewPerson.ScrollIntoView(routePoint);
break;
}
}
}
}
else
{
listViewPerson.SelectedIndex = -1;
}
}
}
catch (Exception Caught)
{
Log.AddExceptionEntry(this, "Could not search ", Caught, Log.Target.All,
Log.EntryType.Error);
}
}
La recherche et la sélection fonctionnent très bien. Lors de la première tentative, l'utilisateur peut sélectionner un deuxième point (le premier est déjà sélectionné par la recherche) et sélectionner plusieurs fois le premier sans problème. Cependant, pour la deuxième fois, la liste continue de mémoriser le premier point sélectionné à partir de la première recherche (qui a été initialement définie par la routine de recherche), ce qui fait que la sélection commence au mauvais endroit (même si l'index sélectionné est correctement défini sur le nouvel élément dans la liste). Cependant, un clic de souris sur l'index sélectionné entraîne la réinitialisation correcte du point de sélection. Il semble que selectedindex fonctionne différemment dans le code par rapport aux clics manuels.
J'ai essayé d'utiliser listViewTrainServiceHelperPattern.SelectedItems.Clear(), SelectedValue (object) au lieu de SelectedIndex, mais en vain. Est-ce que quelqu'un a une idée de ce qui cause et comment contourner cela?
J'ai lu plusieurs fois, mais je suis encore un peu confus au sujet de certaines informations manquantes. Que signifie la sélection d'un second «point», et quelle action ou événement commence la «deuxième fois autour de la liste? Si vous avez sélectionné plusieurs éléments, l'élément 'selectedindex' renvoie le premier index sélectionné, pas l'index sélectionné le plus récemment. Cependant, à partir de votre question, je ne peux pas dire ce qui se passe entre la première fois que votre moteur de recherche fonctionne et le «deuxième tour». Est-ce que tous les éléments sont effacés, exécutez-vous une logique personnalisée ...? – Scott
Qu'est-ce que 'routePoint'? Il semble que cela pourrait vivre à travers les invocations de cet événement. Aussi, ce code ne me semble pas très "MVVM", car il a une logique de vue en code-behind plutôt que dans le modèle de vue. Si vous rencontrez des problèmes lors de la manipulation de 'TextChanged' en temps réel avec MVVM, essayez ceci dans votre liaison:' UpdateSourceTrigger = PropertyChanged' –
Oups, désolé de necro :) –