Windows Phone 7: событие ListBox SelectionChanged

Я новичок в XAML и Windows Phone 7 SDK. Я разрабатываю приложение для Windows Phone 7 и не знаю, как определить выбранный элемент в ListBox. Я использую шаблон панорамы, вот мой код:

<controls:PanoramaItem Header="Basic">
   <ListBox Margin="0,0,-12,0" Name="MyListBox" SelectionChanged="Elementary_SelectionChanged">
      <ListBox.ItemTemplate>
         <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
               <Image Height="100" Width="100" Source="{Binding LevelPassedImage}" Margin="12,0,9,0"/>
               <StackPanel Width="311">
                  <TextBlock Name="lvlName" x:Uid="Elementary{Binding LevelId}" Text="{Binding LevelName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
                  <TextBlock Text="{Binding LevelPassed}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" />
               </StackPanel>
            </StackPanel>
         </DataTemplate>
      </ListBox.ItemTemplate>
   </ListBox>
</controls:PanoramaItem>

И код C #:

MessageBox.Show(Elementary.SelectedItem.ToString()); //returns "LocalXmlParsing.XMLParser"

Я использую XMLParser, код инициализации приложения:

var parser = LocalXmlParsing.XMLParser.Instance;

StreamResourceInfo strm = Application.GetResourceStream(new Uri("Levels/ElementaryLevels.xml", UriKind.Relative));
StreamReader reader = new StreamReader(strm.Stream);
string data = reader.ReadToEnd();
parser.DataToParse = data;
parser.ParseStateData();
MyListBox.ItemsSource = parser.LevelCollection;

Когда я пытаюсь обнаружить SelectedItem, ListBox возвращает мне эту строку: «LocalXmlParsing.XMLParser».


person mirelana    schedule 09.08.2013    source источник
comment
Что такое ItemsSource вашего ListBox? Вы должны привести его к типу объекта. Например, если источником является List ‹myClass›, то вы можете преобразовать SelectItem в myClass.   -  person Farhad Jabiyev    schedule 09.08.2013
comment
Я редактировал код, что делаю не так?   -  person mirelana    schedule 09.08.2013


Ответы (2)


Похоже, вы используете пример проекта Nokia под названием «LocalXmlParsing». Вы все еще можете использовать свой код, но если вы хотите обнаружить SelectedItem, вы должны использовать что-то вроде этого:

LocalXmlParsing.Level selecteditem = (LocalXmlParsing.Level)myListBox.SelectedItem; //it will returns your element
MessageBox.Show(selecteditem.Id); //It will return the Id of SelectedItem (String). You should use yours: SelectedItem.MyElement
person Community    schedule 10.08.2013

Выбранный вами элемент не является ListBoxItem, но на самом деле это тип любого объекта, который вы связали с ListBox через ItemSource. Таким образом, приведение его к ListBoxItem возвращает вам нулевой объект.

ListBox.ItemsSource = new List<myObject>() { new myObject(), new myObject() };
ListBox.SelectedIndex = 1;
var selectedObject = ListBox.SelectedItem as myObject;
person Joe Brunscheon    schedule 09.08.2013
comment
поэтому я не могу обнаружить выбранный элемент / объект? - person mirelana; 09.08.2013
comment
Выбранный вами элемент будет любого типа объекта, который он возвращает: parser.LevelCollection - person Joe Brunscheon; 09.08.2013
comment
Похоже, это тип: LocalXmlParsing.XMLParser. - person Joe Brunscheon; 09.08.2013
comment
Да, но как его преобразовать / разобрать? - person mirelana; 09.08.2013
comment
Вам нужно использовать синтаксический анализатор для разбора вашего XML на конкретные типы. Что-то вроде этого должно помочь: stackoverflow.com/questions/14226473 / c-sharp-parsing-xml-файл - person Joe Brunscheon; 09.08.2013
comment
Я бы попытался перейти к использованию XDocuments и синтаксическому анализу таким образом. Вы также можете попробовать использовать Linq to XML (множество ссылок для просмотра, если вы это погуглите). - person Joe Brunscheon; 09.08.2013