Wählen Sie den Menüpunkt programmgesteuert in WPF-ListView
Ich bin nicht in der Lage, herauszufinden, wie zu wählen Sie ein Element programmgesteuert in einer ListView.
Ich bin versucht, die listview ItemContainerGenerator, aber es scheint einfach nicht zu funktionieren. Zum Beispiel, obj ist null nach der folgenden operation:
//VariableList is derived from BindingList
m_VariableList = getVariableList();
lstVariable_Selected.ItemsSource = m_VariableList;
var obj =
lstVariable_Selected.ItemContainerGenerator.ContainerFromItem(m_VariableList[0]);
Ich versucht habe (anhand der Vorschläge sehen hier und an anderen Orten) zu verwenden, die ItemContainerGenerator das StatusChanged-Ereignis, aber ohne Erfolg. Das Ereignis wird nie ausgelöst. Zum Beispiel:
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]);
}
Den Kern dieser ganzen Sache ist, dass ich möchte einfach vor, wählen Sie ein paar Sachen in meine ListView.
Im Interesse nicht aus etwas heraus, das ListView verwendet, einige templates und Drag/Drop-Funktionalität, also ich bin auch der XAML-Code hier. Im wesentlichen werden in dieser Vorlage macht jedes Element eine textbox mit text - und wenn ein beliebiges Element ausgewählt ist, wird das Kontrollkästchen aktiviert ist. Und jeder Eintrag erhält auch eine kleine Glyphe ' darunter einfügen neuer Elemente (und diese alle funktioniert):
<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"/>
So was bin ich? Wie kann ich programmgesteuert wählen Sie eines oder mehrere der Elemente in der ListView?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Binden die
IsSelected
Eigenschaft desListViewItem
um eine Eigenschaft, die auf Ihr Modell. Dann brauchen Sie nur mit Ihrem Modell, anstatt sich Gedanken über die Feinheiten UI, das umfasst mögliche Gefahren rund um container-Virtualisierung.Beispiel:
Nun, gerade die Arbeit mit Ihrem Modell der
IsGroovy
Eigenschaft zu aktivieren/deaktivieren von Elementen in derListView
.Hier wäre meine beste Vermutung, die wäre eine sehr viel einfachere Methode für die Auswahl. Da ich nicht sicher bin, was Sie die Auswahl auf, hier ein Allgemeines Beispiel:
Was ich bin, gewohnt zu sehen, ist ein entsprechendes SelectedItem, aber ich sehe, Sie können nicht festlegen, oder fügen Sie diese, aber hoffentlich diese Methode funktioniert als Ersatz.
Wobei 'dies' ist das ListView-Instanz. Dies wird nicht nur die Auswahl, sondern auch den Fokus auf das neu ausgewählte Element.