4

I have a ListView with a databinding to a TreeView that is databinded to a XmlDataProvider. In a ListView you can select multible items at once. My problem is that i need to know which items were selected. How can i get the names from the ListViewItems?

XAML:

<ListView x:Name="listViewCards" DataContext="{Binding ElementName=treeViewCategory, Path=SelectedItem}" ItemsSource="{Binding XPath=./card/title, UpdateSourceTrigger=PropertyChanged}" KeyDown="listViewCards_KeyDown" />

C#:

private void listViewCards_KeyDown(object sender, KeyEventArgs e)
{
    IList selectedListViewItems = listViewCards.SelectedItems;
    if (selectedListViewItems.Count > 1)
    {
        //delete all selected items from xml:
        foreach (XmlNode node in xmlNode.ChildNodes)
        {
            if (node.InnerText.Equals( ??? ))
            {
                //mark for deleting
            }
        }
    }
}
jwillmer
  • 3,570
  • 5
  • 37
  • 73

2 Answers2

3

The objekt of type "System.Windows.Controls.SelectedItemCollection" can´t convert into "System.Windows.Controls.ListViewItem"

Try this:

private void listViewCards_KeyDown(object sender, KeyEventArgs e)
{
     IList selectedListViewItems = listViewCards.SelectedItems;
     if (selectedListViewItems.Count > 1)
     {
         //delete all selected items from xml:
         var collection = selectedListViewItems.Cast<XmlNode>();  //assuming your underlying data is XmlNode
         foreach(XmlNode node in collection)
         {
             //do whatever you want to do with node
             if (node.InnerText.Equals( ??? ))
             {
                 //mark for deleting
             }
         }
     }
}


Related: How to cast a System.Windows.Controls.SelectedItemCollection?

Community
  • 1
  • 1
publicgk
  • 3,170
  • 1
  • 26
  • 45
  • awesome, i was close, one hour ago i tried this: foreach (object node in selectedListViewItems.Cast()) – jwillmer Mar 18 '11 at 17:19
0
listViewCards.SelectedItems;

is going to return the Type(ListViewItem most likely). You will need to cast that type, if it is of Type XmlNode.

private void listViewCards_KeyDown(object sender, KeyEventArgs e)
{
    IList selectedListViewItems = listViewCards.SelectedItems;
    if (selectedListViewItems.Count > 1)
    {
        foreach(var node in ((ListViewItem)selectedListViewItems).Tag as XMLNode)
        {
            // Find your node in whatever type contains your xml
            // Do Some deleting or what have you.
        }
    }
}
Landern
  • 374
  • 2
  • 5
  • The objekt of type "System.Windows.Controls.SelectedItemCollection" can´t convert into "System.Windows.Controls.ListViewItem" – jwillmer Mar 17 '11 at 14:20