Windows phone 8 删除菜单项(在Windows Phone 8上)后,如何刷新/更新LongListSelector?

Windows phone 8 删除菜单项(在Windows Phone 8上)后,如何刷新/更新LongListSelector?,windows-phone-8,refresh,longlistselector,Windows Phone 8,Refresh,Longlistselector,我正在尝试从Windows Phone 8应用程序的LongListSelector中删除菜单项。菜单项在单击时播放各种声音,我希望用户能够删除它们 应用程序上有两个面板。第二个面板录制新声音,并将录制的声音作为新菜单项放在LongListSelector上 问题:执行删除操作后,屏幕看起来完全相同,声音仍然播放!但是,如果我录制了一个新的声音(切换到新的录制面板),则删除操作将与删除的菜单项一起进行 如何强制更新/刷新LongListSelector以卸载/删除驻留在GUI上的菜单项和相关声音

我正在尝试从Windows Phone 8应用程序的LongListSelector中删除菜单项。菜单项在单击时播放各种声音,我希望用户能够删除它们

应用程序上有两个面板。第二个面板录制新声音,并将录制的声音作为新菜单项放在LongListSelector上

问题:执行删除操作后,屏幕看起来完全相同,声音仍然播放!但是,如果我录制了一个新的声音(切换到新的录制面板),则删除操作将与删除的菜单项一起进行

如何强制更新/刷新LongListSelector以卸载/删除驻留在GUI上的菜单项和相关声音数据

以下代码是从菜单项的单击事件调用的。LongListSelector名为“CustomSounds”:

private void DeleteSoundClick(object sender, RoutedEventArgs e)
{
    var menuItem = sender as MenuItem;
    if (menuItem == null) return;

    var soundData = menuItem.DataContext as SoundData;
    if (soundData == null) return; 

    if (soundData.FilePath.Contains(CustomSounds.Name))
    {
        CustomSounds.ItemsSource.Remove(soundData);
    }

    this.LayoutRoot.UpdateLayout();
}

把你的东西倒过来。使用新列表设置项目源

private void DeleteSoundClick(object sender, RoutedEventArgs e)
{
    var menuItem = sender as MenuItem;
    if (menuItem == null) return;

    var soundData = menuItem.DataContext as SoundData;
    if (soundData == null) return; 

    if (soundData.FilePath.Contains(CustomSounds.Name))
    {
        MyNewList.remove(soundData);
        CustomSounds.ItemsSource = myNewList;
    }

    this.LayoutRoot.UpdateLayout();
}
创建局部变量并在构造函数中设置itemsource

其他事项:

创建更新的列表:

private ObservableCollection<Sound> _myNewList;
public ObservableCollection<Sound> MynewList{
get
  {
    return _myNewList;
  }
  set
  {
    _myNewList= value;
    RaisePropertyChanged(MynewList); 
   }
删除项目:

private void DeleteSoundClick(object sender, RoutedEventArgs e)
{
    if(SelectedSound != null){
Mynewlist.remove(SelectedSound);
}

}

:D

ObservableCollection只不过是一个集合,当集合中发生更改时,它会通知UI。它只是一个ItemSource,所以您的LongListSelector由OC填充…

我有同样的问题,但是,我使用了简单列表

解决方案很简单-只是创建了列表中的新对象

var newList = new List<TheModel>();

newList.AddRange(originalList);

TheLongListSelector.ItemsSource = newList;
TheLongListSelector.UpdateLayout();
var newList=newList();
newList.AddRange(原始列表);
LongListSelector.ItemsSource=newList;
longlistSelector.UpdateLayout();
原始列表是已删除项的列表


这不是最有效的方法,但它是有效的。我认为这对于小数据来说没有问题。

非常好-将UI视为不可变的,并让垃圾收集器清理。但是我对你使用可观察收集有点困惑。我以前尝试使用ObservableCollection而不是LongListSelector,但编译失败。也许我错过了放置ObservableCollection的正确位置?ObservableCollection实现INotifyCollectionChanged,它在集合更改时提供通知。它允许绑定引擎在ObservableCollection更新时更新UI。LongListSelector类似于textblock,它是xaml中的组件。不存在:)我正在尝试使用您的解决方案,但不起作用。。首先,RaisePropertyChanged在该上下文中无效,您在哪里声明了它?另外,您是否在LongListSelector上尝试过此解决方案?请帮忙@MatDev8
private void DeleteSoundClick(object sender, RoutedEventArgs e)
{
    if(SelectedSound != null){
Mynewlist.remove(SelectedSound);
}

}
var newList = new List<TheModel>();

newList.AddRange(originalList);

TheLongListSelector.ItemsSource = newList;
TheLongListSelector.UpdateLayout();