2017-07-31 107 views
-1

想有selectable项目从ListViewItemsSourcebindedObservableCollection删除。 Debugging显示这些项目被正确标记为选中状态并移除了列表本身。但显示的ListView不会更新到更改,因此删除的项目保持shownC#WPF的ListView犯规更新从的ObservableCollection项目时删除

查看

<ListView BorderThickness  = "0" 
          AlternationCount  = "2" 
          BorderBrush   = "Transparent" 
          ItemsSource   = "{Binding TestEntries}" 
          Style     = "{StaticResource ListViewStyle}" 
          ItemContainerStyle = "{StaticResource ListViewItemStyle}" 
          ScrollViewer.HorizontalScrollBarVisibility="Hidden"> 

观察集合

public ObservableCollection<Entry> TestEntries 
{ 
    get => new ObservableCollection<Entry>(_testEntries 
      .Where(x => x.Title.ToUpper().Contains(FilterText.ToUpper())) 
      .OrderByDescending(x => x.Date)); 
    set 
    { 
     _testEntries = value; 
     OnPropertyChanged(); 
    } 
} 

命令(删除项目)

private void ButtonDeleteCommandExecute() 
{ 
    var toDeleteEntries = TestEntries.Where(x => x.IsSelected); 
    toDeleteEntries.ToList().ForEach((obj) => 
    { 
     TestEntries.Remove(obj as Entry); 
    }); 
} 

希望如此meone可以点我在正确的方向

+3

你总是得到返回新的'ObservableCollection',所以当你试图删除的项目,它是由新删除'ObservableCollection'的是,当然,发送'CollectionChanged'但你的'ListView'只在初始化时立即返回'ObservableCollection'的实例,它不知道新集合的'CollectionChanged'。 –

+0

这很有道理,谢谢你的解释。改变吸气剂后,它就像魅力一样。非常感谢 :)。 – Delhoz

回答

0

试试这个:在

回报您ObservableCollection的同一对象的getter因此它可以notifyTarget更新本身@George亚历山大建议。

public ObservableCollection<Communication> TestEntries 
{ 
    get 
    { 
     return _testEntries;     
    } 
    set 
    { 
     _testEntries = value; 
     //OnPropertyChanged(); <-- of no use 
    } 
} 

既然要filter数据在你listView

TestEntries = new ObservableCollection<Communication>(_testEntries.Where(x=>x.Title.ToUpper().Contains(FilterText.ToUpper())).OrderByDescending(x=>x.Date).ToList()); 
相关问题