2014-02-14 35 views
0

使用的Windows Phone 8C# - 實施INotifyPropertyChanged的到的ObservableCollection(解決)

所以我一直在ObservableCollectionListboxes玩耍,並結合他們,但我從來沒有與INotifyPropertyChanged各地播放。我聽說這會使很多事情變得更容易,即自動檢測ObservableCollection中的內容是否發生了變化。

如果它不是過分的要求有可能是有人向我提供具有這些功能的一個簡單的代碼示例:

  • 添加
  • 刪除

所以基本上只是將項目添加到ObservableCollection和一個按鈕到從ObservableCollection刪除所選項目,這將更新ObsevableCollection。

這只是我從來沒有明白INotifyPropertyChanged如何工作。在線樣本似乎不適合我,我所要求的只是一個簡單的例子。

UPDATE

我已經成功地添加的ObservableCollection。

public partial class MainPage : PhoneApplicationPage 
{ 
    public AddItems LoadItems = new AddItems(); 

    public MainPage() 
    { 
     InitializeComponent(); 
     listBox.DataContext = LoadItems; 
    } 

    public class Items 
    { 
     public string ItemTitle { get; set; } 
     public string ItemBody { get; set; } 
     public string FolderID { get; set; } 
    } 

    public class AddItems : ObservableCollection<Items> 
    { 
     public AddItems() 
     { 
      Add(new Items() { ItemTitle = "Book", ItemBody = "A simple Book.", FolderID = Count.ToString() }); 
      Add(new Items() { ItemTitle = "Paper", ItemBody = "Something to write on.", FolderID = Count.ToString() }); 
      Add(new Items() { ItemTitle = "Pen", ItemBody = "Something you use to write.", FolderID = Count.ToString() }); 
     } 
    } 

    private void Delete_Click(object sender, RoutedEventArgs e) 
    { 

    } 
} 

現在,如果我想從列表框中刪除項目,我該怎麼做?我試過了:

LoadItems.Remove(listBox.SelectedItem); 

但是沒有奏效。我如何刪除選定的項目並讓ObservableCollection自動檢測到該更改並進行刷新,以便它不會顯示已刪除的項目?

謝謝!

+0

試試這種方式:'LoadItems.RemoveAt(listBox。SelectedIndex)' – har07

+0

@ har07由於我使用的是contextMenu(用戶必須點擊並按住以調出contextMenu),我必須單擊ListBox項然後將其刪除。有沒有辦法讓我可以只持有列表框項目,然後點擊刪除將刪除該項目,而不是點擊列表框項目,然後刪除它? –

+0

是的,這是常見的情況,常見的錯誤是人們將ContextMenu添加到ListBox而不是ListBoxItem。檢查此參考以實現:1. [更簡單的方式](http://stackoverflow.com/a/14168934/2998271),2. [更多MVVM兼容方式](http://stackoverflow.com/a/14168934/ 2998271) – har07

回答

3

您不需要INotifyPropertyChanged來處理Add/Remove方法:ObservableCollection<T>將爲您處理這些。

當需要屏幕更新集合中已存在的項目發生變化時,您需要INotifyPropertyChanged其中一個屬性獲得不同的價值。

要做到這一點T必須執行INotifyPropertyChanged,而不是ObservableCollectinon本身。

4

ObservableCollection<T>已經實現了INotifyCollectionChanged,這使得每當添加或從集合中刪除項目時都會通知UI。因此,例如,與數據綁定一起,只需調用ObservableCollection<T>.Add()函數就足以將項目添加到集合中,並通知UI顯示新添加的項目而無需進一步的努力。

INotifyPropertyChanged是不同的東西。它用於通知UI在基礎屬性值發生變化時更新顯示值。

相關問題