我查了几个ObservableCollection的实现,下面是我最后得到的结果。在启动服务时,我得到了添加触发的事件,但是当我调用并更新列表中的对象的属性时,集合根本不通知或触发。
ObservableCollection处理程序
public class iGamingObservableCollection
{
ObservableCollection<GameInstance> _contentList;
public iGamingObservableCollection()
{
_contentList = new ObservableCollection<GameInstance>();
_contentList.CollectionChanged += ContentCollectionChanged;
}
public ObservableCollection<GameInstance> ContentList
{
get { return _contentList; }
}
public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach (GameInstance item in e.OldItems)
{
Console.WriteLine("removed: State is now: " + item.InstanceState);
//Removed items
}
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (GameInstance item in e.NewItems)
{
Console.WriteLine("added: State is now: " + item.InstanceState);
//Added items
//item.PropertyChanged += InstancePropertyChange;
}
}
else if (e.Action == NotifyCollectionChangedAction.Replace)
{
foreach (GameInstance item in e.NewItems)
{
Console.WriteLine("changed: State is now: " + item.InstanceState);
//Changed items
//item.PropertyChanged += InstancePropertyChange;
}
}
else if (e.Action == NotifyCollectionChangedAction.Replace)
{
foreach (GameInstance item in e.OldItems)
{
Console.WriteLine("changed: State is now: " + item.InstanceState);
//Changed items
//item.PropertyChanged += InstancePropertyChange;
}
}
}ObservableCollection控制器
public class InstanceManagerService : IInstanceManager
{
//TODO: FIX THAT CLASS.. THIS IS INITIAL IMPLEMENTATION!!!
IGameInstanceRepository instanceRepository;
iGamingObservableCollection notifyList = new iGamingObservableCollection();
//private Timer updateNotifierTimer;
public InstanceManagerService(IGameInstanceRepository instanceRepository)
{
this.instanceRepository = instanceRepository;
populateNotifyList();
//updateNotifierTimer = new Timer((e) => { populateNotifyList(); }, null, 120 , (int)(TimeSpan.FromMinutes(2).TotalMilliseconds));
}
private void populateNotifyList()
{
var list = instanceRepository.getInstances();
foreach (var l in list)
{
notifyList.ContentList.Clear();
notifyList.ContentList.Add(l);
}
Console.WriteLine("Notify list content updated.");
}
public bool releaseInstance(Guid instanceId)
{
if (instanceRepository.UpdateGameInstanceToFree(instanceId))
{
var notifyTask = notifyList.ContentList.Where(g => g.Id == instanceId).FirstOrDefault();
notifyTask.InstanceState = InstanceState.Free;
return true;
}
return false;
}发布于 2017-04-25 12:03:55
但是,当我调用和更新列表中的对象的属性时,集合根本不通知或触发。
ObservableCollection不是这样工作的。当在集合中添加/删除对象时,就会触发CollectionChanged。这就是为什么NotifyCollectionChangedAction没有Updated值的原因。要做您想做的事情,在类中实现INotififyPropertyChanged。
https://stackoverflow.com/questions/43610058
复制相似问题