2015-02-21 4 views
0

Я пытаюсь создать ListView элементов и уметь их удалять. Вот мой код. Я не могу получить список элементов для отображения. Я не нашел простой пример привязки ListViews, чтобы я мог понять точную концепцию. Можете ли вы сказать мне, что я делаю неправильно?Windows Phone ListView Binding

PS. myListOfItems - это список со строками. Проект WP 8.1 WinRT.

public class MedClass 
    { 
     public string medName { get; set; } 
    } 

    public class MedClassRoot 
    { 
     public List<MedClass> medNames { get; set; } 
    } 

    public sealed partial class MedSavedPage : Page 
    { 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      MedClassRoot root = new MedClassRoot(); 
      root.medNames = new List<MedClass>(); 

      foreach (var element in myListOfItems) 
      { 
       root.medNames.Add(new MedClass {medName = element}); 
      } 

      MedSaved_ListView.DataContext = root; 
      //MedSaved_ListView.ItemsSource = root; 
     } 

    <ListView DataContext="{Binding root}" 
       x:Name="MedSaved_ListView" 
       HorizontalAlignment="Left" 
       Height="507" 
       Margin="10,73,0,0" 
       VerticalAlignment="Top" 
       Width="380" Tapped="MedSaved_ListView_Tapped"> 

     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Height="30"> 
        <TextBlock Text="{Binding medName}" FontSize="16"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
+0

Вы используете MVVM? –

ответ

1

Это самый быстрый способ, чтобы заставить его работать:

  • Удалите часть DataContext из ListView на данный момент.

  • Просто установите ItemsSource в список ваших пунктов (комментарий ту часть, где вы делаете MedSaved_ListView.DataContext = корень, и раскомментируйте и измените следующую строку)

    MedSaved_ListView.ItemsSource = root.medNames; 
    

Объяснение - в ListView ItemsSource - это коллекция, используемая для создания содержимого ItemsControl. Вам нужно установить его на какой-то IEnumerable. Ваши имена medNames имеют тип List, который реализует IEnumerable, поэтому вам нужно установить для него ItemsSource.

+0

И когда я захочу удалить элемент из ListView, я удаляю элемент из medNames, но как обновить ListView, чтобы он не показывал этот элемент? – Macaret

+0

@ Макарет в этом случае, ваша установка немного неправильная. Вы должны использовать ObservableCollection, поскольку он способен уведомлять пользовательский интерфейс, когда есть событие изменения коллекции (например, когда вы удаляете элемент). Пожалуйста, ознакомьтесь с некоторыми из многих руководств по темам: привязка данных, ObservableCollection, ListBox или ListView, возможно, даже MVVM, например: http://blogs.msdn.com/b/quick_thoughts/archive/2014/06/10/data-binding -часть-3-наблюдаемый-collection.aspx. –

+0

Спасибо за ссылку, которую вы мне дали. Я реализовал ObservableCollection и успешно отобразил список, а также удалил элемент. – Macaret

Смежные вопросы