2014-02-14 36 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在基础属性值发生变化时更新显示值。

相关问题