2

我有一个listbox tuningList包含的元素List<Tuning> tunings

  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"/>

编辑2:

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

编辑3:

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

1 回答 1

6

在这种情况下,我的建议是将您的ListBox控件绑定到一个ObservableCollection<T>,当一个项目被添加或删除时,它会自动通知视图,因为它实现了INotifyCollectionChanged

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

于 2013-01-11T18:26:18.830 回答