2017-07-31 91 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()); 
相關問題