Search code examples
c#xamlwindows-phone-7silverlight-4.0

How to access a class from a listbox item?


I build a class that stores values from an XML file. I am loading that data into a ListBox like this:

private void LoadBookXML(string bookXML, ListBox theBookListBox)
    {
        XDocument loadedData = XDocument.Load(bookXML);
        var data = from query in loadedData.Descendants("book")
                   select new Books
                   {
                       Title = (string)query.Attribute("title").Value.ToUpper(),
                       Theme = (string)query.Attribute("theme").Value,
                       Abbreviation = (string)query.Attribute("abbr").Value,
                       Chapters = (string)query.Attribute("chapters").Value,
                       Writer = (string)query.Attribute("writer").Value,
                       Place = (string)query.Attribute("place").Value,
                       Completed = (string)query.Attribute("completed").Value,
                       Time = (string)query.Attribute("time").Value,
                       Summary = (string)query.Attribute("summary").Value,
                       Link = (string)query.Attribute("link").Value,
                       Number = (string)query.Attribute("number").Value,
                       WriterAndPlace = "Written by " + (string)query.Attribute("writer").Value + " in " + (string)query.Attribute("place").Value,
                   };
        theBookListBox.ItemsSource = data;

        GestureService.GetGestureListener(theBookListBox).Hold += new EventHandler<GestureEventArgs>(theBookListBox_Hold);

When I press and hold an item in the ListBox, I am calling a function that brings up context menu like this:

private void theBookListBox_Hold(object sender, GestureEventArgs e)
    {
        AppState state = ThisApp._appState;

        if (e.OriginalSource is TextBlock)
        {
            if (((string)((e.OriginalSource as TextBlock).Name)) == "btBookName")
            {
                UpdateLayout();
                _cmReader = new ContextMenu();

                MenuItem item = new MenuItem();
                item.IsEnabled = true;
                item.IsHitTestVisible = true;
                TextBlock block = new TextBlock();
                block.Text = "HELP, I AM TRYING TO GET DATA FROM THE BOOKS CLASS!!!";
                block.TextDecorations = TextDecorations.Underline;
                item.Header = block;

                MenuItem item5 = new MenuItem
                {
                    Header = "book info"
                };
                item5.Click += new RoutedEventHandler(bookInfo_Click);         

                _cmReader.Items.Add(item);
                _cmReader.Items.Add(item5);

                OpenContextMenu();
            }
        }
    }

So my question is how can I access the data from the Books class that is stored into each of the ListBoxItems? I am using C#.


Solution

  • is that what you mean?

    Books book = theBookListBox.SelectedItem as Books;

    //All
    foreach(Books book in theBookListBox.Items)
    {
    }