2015-11-15 7 views
0

Я загружаю данные из XML-файла в список. Вот мой xamlКак получить значение выбранного элемента списка

<ListBox x:Name="lstSearchCategory" FontFamily="Arial Black" 
     VerticalAlignment="Center" Margin="25,69,19,10" Height="264"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel > 
       <Image Source="{Binding Image}" Height="100" Width="100" 
         HorizontalAlignment="Left"></Image> 
       <TextBlock HorizontalAlignment="Right" Text="{Binding Name}" 
          FontSize="30" Foreground="Black" Margin="140,-100,0,0"/> 
       <TextBlock Text="{Binding Category}" FontSize="24" 
          Foreground="Black" Margin="10,-10,0,0"/> 
       <TextBlock Text="{Binding Price}" HorizontalAlignment="Right" 
          Foreground="Red" Margin="300,-25,0,16"/> 
       <Rectangle Width="500" Fill="Black" Height="0.5"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Это прекрасно работает. Теперь я хочу, чтобы, когда я выбираю элемент списка, я получаю его соответствующие значения: i.e изображение, цена, категория и т. Д. Как я могу это сделать? Помощь

ответ

-1

Если вы заполните ListBox через переплет, у вас должно быть какое-то свойство lile SelectedItem в вашей модели. Поэтому выбранный элемент всегда должен храниться в режиме просмотра для удобства доступа. Просто добавьте привязку к SelectedItem в свою модель просмотра, и каждая вещь должна работать.

+0

Можете ли вы показать мне код? Я смущаюсь, как получить выбранную категорию и т. Д. –

0

Вы должны получить выбранный элемент в ListBox Event и получить DataTemplate из ListBox (как видно на MSDN):

private void lstEvents_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      ListBoxItem lbi = (lstEvents.ItemContainerGenerator.ContainerFromIndex(lstEvents.SelectedIndex)) as ListBoxItem; 
      ContentPresenter cp = GetFrameworkElementByName<ContentPresenter>(lbi); 
      DataTemplate dt = lstEvents.ItemTemplate; 
      Label l = (dt.FindName("lblEventId", cp)) as Label; 
      MessageBox.Show(l.Content.ToString()); 
     } 
+0

его ошибка получения в GetFrameworkElementByName и FindName –

+0

Не могли бы вы посмотреть на следующий пример. http://windowsapptutorials.com/windows-phone/listbox-windows-phone/implementing-a-custom-data-template-selector-in-windows-phone-8s-listbox-control/ – STORM

0

Вы должны генерировать Tap = "lstSearchCategory_Tap" в файле XAML и ниже код в .cs файле

private void lstSearchCategory_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    try 
    { 
     ListBox ListBoxSelecteditem = (ListBox)sender; 
     YourModel model = (YourModel)ListBoxSelecteditem.SelectedItem;    

     string name = model.Name; 
     string cat = model.Category; 
     ....... 

     string ControlName = ((System.Windows.FrameworkElement) 
          (((System.Windows.RoutedEventArgs)(e)).OriginalSource)).Name; 
     if (ControlName.ToLower() != "name".ToLower()) 
     { 
     } 
    } 
    catch (Exception ex) 
    { } 
} 
0

попробовать это

<ListBox Tap="lstSearchCategory_Tap" x:Name="lstSearchCategory"> 

и чем на событие водопроводную добавить этот

var selected = (classname)lstSearchCategory.SelectedValue; 
    MessegeBox.Show(selected.Name + selected.Price); 

здесь имя класса имя класса, в котором вы связывании имя, цены и т.д. значения