C# 如何通知UI列表中的一个或多个发生了更改';s成员
我有以下问题: 我正在通过C# 如何通知UI列表中的一个或多个发生了更改';s成员,c#,wpf,windows-phone-7,list,binding,C#,Wpf,Windows Phone 7,List,Binding,我有以下问题: 我正在通过上下文菜单向收藏夹列表(列表)添加一个元素。每个项都有一个派生属性IsFavorite,该属性根据收藏夹列表的不同而变化,如下所示: public bool IsFavorite { get { return ItemController.FavoriteList.Contains( this ); } } 当我从ContextMenu添加(或删除)内容时,必须立即更新ContextMenu 现在,我知道通过使用ObservableCollection可以做到
上下文菜单
向收藏夹列表(列表
)添加一个元素。每个项
都有一个派生属性IsFavorite
,该属性根据收藏夹列表的不同而变化,如下所示:
public bool IsFavorite
{
get { return ItemController.FavoriteList.Contains( this ); }
}
当我从ContextMenu
添加(或删除)内容时,必须立即更新ContextMenu
现在,我知道通过使用ObservableCollection可以做到这一点,但由于一些我无法控制的因素,我必须使用列表
对象进行到期。现在,有什么方法可以让这个刷新吗
public void DeleteFromFavorites(Item item)
{
Item itemInMainList = MainList.First(item);
itemInMainList.Refresh();
}
项目1.cs:
public bool IsFavorite
{
get { return ItemController.FavoriteList.Contains( this ); }
}
public void Refresh()
{
NotifyPropertyChanged("IsFavorite");
}
如果重新绑定,它可能会刷新。为什么不能更改为ObservableCollection?ObservableCollection实现了List,所以它不应该破坏任何东西。我认为即使使用ObservableCollection,也不会有关于
IsFavorite
属性更改的通知,除非您手动添加处理程序并为IsFavorite
触发PropertyChanged事件。找到了一种解决方法。当然不是很漂亮,但是当项目被添加到收藏夹列表中时,我可以直接触发该对象的PropertyChanged。好吧,你不可能真正知道你的是收藏夹,因为你没有定义它的更改位置(即在集中)。通常,当触发PropertyChanged
事件时,UI会收到通知。但是,在这里,您不会设置此属性,也不会为任何PropertyChanged
,因此您可能必须在FavoriteList
上手动添加CollectionChanged
处理程序,当此属性发生更改时,该处理程序将触发PropertyChanged
。或者可能通过一个多绑定的数据触发器
+转换器返回true,如果是最喜欢的,但是。。。这会很难看