2013-01-11 105 views
2

我有List<Tuning> tuningslistbox tuningList包含元素:如何刷新列表框在Windows Phone

private void LoadList() { 
      foreach (Tuning tuning in tunings) 
       tuningList.Items.Add(tuning); 
     } 

在应用中的某一点我想删除tunings一些元素和更新listbox

int selectionIndex = tuningList.SelectedIndex; 
      if (selectionIndex >= 0) { 
       pageTitle.Text = "Deleted tuning"; 
       tunings.RemoveAt(selectionIndex); 
       // tuningList.Items.RemoveAt(selectionIndex); 
       saveData(saver); //saves data to isolated storage 

      } 

但在此之后列表框不会自行更新。编辑:我没有通过XAML将列表框绑定到集合,我通过LoadList()添加了元素。

<ListBox x:Name="tuningList" Margin="8,0,8,152" Tap="tuningList_Tap"/> 

EDIT2:

<ListBox x:Name="tuningList" Margin="8,0,8,152" ItemsSource=tunings.Items Tap="tuningList_Tap"/> 

EDIT3:

<ListBox x:Name="tuningList" Margin="8,0,8,152" DataContext="{Binding RelativeSource={RelativeSource Self}}" ItemsSource="{Binding tunings}" Tap="tuningList_Tap"/> 

回答

6

我在这种情况下,建议的一块将您ListBox控制绑定到ObservableCollection<T>,它会自动通知视图时由于它实现INotifyCollectionChanged,因此项目被添加或删除。

您需要将集合绑定到ListBox。而不是使用LoadList在XAML中设置ItemsSource。否则什么都不会发生。

+1

+1打我跳拳:) – Brian

+0

整个应用程序变化太大(没有足够的时间)有没有这么干净的解决方案? – Yoda

+0

你并没有太多改变,因为你可以在列表上使用ObservableCollection 上几乎相同的调用。 –