使用 Windows Phone 8
所以我一直在玩ObservableCollection
和Listboxes
并绑定他们,但我从未玩过INotifyPropertyChanged
。我听说这会使很多事情变得更容易,即自动检测ObservableCollection
中的某些内容是否会发生变化。
如果没有太多问题,有人可以向我提供一个具有以下功能的简单代码示例:
所以基本上只需将项目添加到ObservableCollection ,然后选择从ObservableCollection 中删除所选项目的按钮,这将更新ObsevableCollection。
只是因为我从未理解INotifyPropertyChanged
是如何运作的。在线样本似乎对我不起作用,我所要求的只是一个简单的样本。
更新
我设法添加了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 :(得分:4)
ObservableCollection<T>
已经实现了INotifyCollectionChanged,这使得无论何时在集合中添加或删除项目,都会通知UI。因此,例如,与数据绑定一起,只需调用ObservableCollection<T>.Add()
函数就足以将项目添加到集合中,并通知UI显示新添加的项目而无需进一步努力。
INotifyPropertyChanged是另一回事。当底层属性的值发生变化时,它用于通知UI更新显示的值。
答案 1 :(得分:3)
您不需要INotifyPropertyChanged
来处理Add
/ Remove
方法:ObservableCollection<T>
会为您处理这些问题。
当您需要屏幕更新时,您需要INotifyPropertyChanged
当集合中已有的项目发生更改时,例如其中一个属性有不同的价值。
要实现这一目标,T
必须实施INotifyPropertyChanged
,而不是ObservableCollectinon
本身。