Sélectionnez l'élément de programme dans WPF ListView
Je suis incapable de comprendre comment sélectionner un élément par programme dans une liste.
Je suis d'essayer d'utiliser la liste de ItemContainerGenerator, mais il ne semble tout simplement pas de travail. Par exemple, obj est nul après l'opération suivante:
//VariableList is derived from BindingList
m_VariableList = getVariableList();
lstVariable_Selected.ItemsSource = m_VariableList;
var obj =
lstVariable_Selected.ItemContainerGenerator.ContainerFromItem(m_VariableList[0]);
J'ai essayé (sur la base de propositions vu ici et en d'autres lieux), l'utilisation de la ItemContainerGenerator de StatusChanged événement, mais en vain. L'événement se déclenche jamais. Par exemple:
m_VariableList = getVariableList();
lstVariable_Selected.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged);
lstVariable_Selected.ItemsSource = m_VariableList;
...
void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
//This code never gets called
var obj = lstVariable_Selected.ItemContainerGenerator.ContainerFromItem(m_VariableList[0]);
}
Le nœud de toute cette affaire, c'est que je veux simplement pré-sélectionner quelques-uns des éléments dans ma Liste.
Dans l'intérêt de ne pas laisser quoi que ce soit, la liste utilise des gabarits et faites-le Glisser/Déposer, donc je suis, y compris le code XAML ici. Essentiellement, ce modèle fait chaque élément d'une zone de texte avec le texte - et lorsqu'un élément est sélectionné, la case est cochée. Et chaque élément obtient également un peu glyphe dessous pour insérer de nouveaux éléments (et ça fonctionne très bien):
<DataTemplate x:Key="ItemDataTemplate_Variable">
<StackPanel>
<CheckBox x:Name="checkbox"
Content="{Binding Path=ListBoxDisplayName}"
IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
<Image ToolTip="Insert Custom Variable" Source="..\..\Resources\Arrow_Right.gif"
HorizontalAlignment="Left"
MouseLeftButtonDown="OnInsertCustomVariable"
Cursor="Hand" Margin="1, 0, 0, 2" Uid="{Binding Path=CmiOrder}" />
</StackPanel>
</DataTemplate>
...
<ListView Name="lstVariable_All" MinWidth="300" Margin="5"
SelectionMode="Multiple"
ItemTemplate="{StaticResource ItemDataTemplate_Variable}"
SelectionChanged="lstVariable_All_SelectionChanged"
wpfui:DragDropHelper.IsDropTarget="True"
wpfui:DragDropHelper.IsDragSource="True"
wpfui:DragDropHelper.DragDropTemplate="{StaticResource ItemDataTemplate_Variable}"
wpfui:DragDropHelper.ItemDropped="OnItemDropped"/>
Donc ce qui me manque? Comment puis-I du programme, sélectionnez un ou plusieurs éléments dans la liste?
Vous devez vous connecter pour publier un commentaire.
Lier la
IsSelected
propriété de laListViewItem
à une propriété sur votre modèle. Ensuite, vous avez seulement besoin de travailler avec votre modèle plutôt que de se préoccuper de la complexité de l'INTERFACE utilisateur, ce qui inclut les risques potentiels autour de la virtualisation du conteneur.Par exemple:
Maintenant, il suffit de travailler avec votre modèle
IsGroovy
propriété pour sélectionner/désélectionner des éléments dans leListView
.Ici serait ma meilleure supposition, ce qui serait une méthode beaucoup plus simple pour la sélection. Depuis que je ne suis pas sûr de ce que vous achetez, voici un exemple générique:
Ce que je suis habitué à voir est réglable SelectedItem, mais je vois que vous ne pouvez pas créer ou ajouter à cela, mais j'espère que cette méthode fonctionne comme un remplacement.
Où " il " est la liste de l'instance. Cela permettra non seulement de modifier la sélection, mais aussi mettre l'accent sur le nouveau élément sélectionné.