【发布时间】:2017-07-13 09:18:35
【问题描述】:
我有一个看起来像这样的课程:
private ObservableCollection<string> _areaCollection;
private List<string> _removedAreas;
private List<string> _addedAreas;
public Constructor()
{
_areaCollection = new ObservableCollection<string>();
_areaCollection.CollectionChanged += AreaCollectionChanged;
_removedAreas = new List<string>();
_addedAreas = new List<string>();
}
public IEnumerable<string> Areas { get { return _areaCollection; } }
public IEnumerable<string> AddedAreas
{
get { return _addedAreas; }
}
public IEnumerable<string> RemovedAreas
{
get { return _removedAreas; }
}
public void DisableArea(string areaAlias)
{
if (_areaCollection.Contains(areaAlias))
_areaCollection.Remove(areaAlias);
}
public void EnableArea(string areaAlias)
{
if (!_areaCollection.Contains(areaAlias))
_areaCollection.Add(areaAlias);
}
private void SectionCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
var item = e.NewItems.Cast<string>().First();
if (_addedAreas.Contains(item) == false)
{
_addedAreas.Add(item);
}
}
else if (e.Action == NotifyCollectionChangedAction.Remove)
{
var item = e.OldItems.Cast<string>().First();
if (_removedAreas.Contains(item) == false)
{
_removedAreas.Add(item);
}
}
}
然后在我的控制器上更新 actionresult 我调用一个方法来更新属性:
private bool UpdateProperties(IUser current, IUser update, out IUser result)
{
result = current;
// Update areas
...
return true;
}
所以在这里我想要以下结果:
-
_areaCollection的结果包含更新后的列表 -
_removedAreas包含根据更新删除的区域 -
_addedAreas包含根据更新添加的区域
但我坚持这一点。
【问题讨论】:
-
如果一切都是私有的,
ObservableCollection的目的是什么?为什么不将逻辑封装在禁用/启用方法中?此外,真的很难理解你想要达到的目标,这个问题根本不清楚。什么不工作? -
忘记了删除和添加区域的 2 个公共获取属性。我想保留已删除和添加的区域,以便轻松更新数据库。所以首先我通过查看 RemovedAreas 属性来删除这些区域,然后通过查看 AdditionalAreas 属性进行插入。
-
我的问题仍然存在,为什么不直接使用
List而不是ObservableCollection,并将_addedAreas.Add(item);和_removedAreas.Add(item);放入EnableArea/DisableArea方法中?这将简化您的课程。 -
好的,但是接下来如何同步我的 areaCollection 的 2 个对象并获得我想要的结果?
标签: c# asp.net-mvc observable