这是我的模特:
public class ObsModel : BindableBase
{
private String _ObsName = string.Empty;
public string ObsName
{
get { return this._ObsName; }
set { this.SetProperty(ref this._ObsName, value); }
}
private String _ObsColor = string.Empty;
public string ObsColor
{
get { return this._ObsColor; }
set { this.SetProperty(ref this._ObsColor, value); }
}
private String _ObsValue = string.Empty;
public string ObsValue
{
get { return this._ObsValue; }
set { this.SetProperty(ref this._ObsValue, value); }
}
}
然后我可以使用这个对象填充我的模型。
ObservableCollection<ObsModel> LastObsResults = new ObservableCollection<ObsModel>();
但是,如果我通过使用下面的代码将观察名称作为字符串变量,我该如何删除特定的集合?
LatsObsResults.Remove( What DO I PUT HERE);
答案 0 :(得分:2)
通过传入要删除的对象,从集合中删除对象。这可以通过Linq完成:
LastObsResults.Remove(LastObsResults.FirstOrDefault(obs => obs.ObsName == name));
答案 1 :(得分:0)
此解决方案使用LINQ .Where
生成结果的有效子集,然后将该子集分配给新的ObsevableCollection。我正在使用constructor that accepts an IEnumerable
。
var validSubset = LastObsResults.Where(obs => obs.ObsName != name);
LastObsResults = new ObservableCollection<ObsModel>(validSubset);
答案 2 :(得分:0)
试试这个:
var lastObsUpdated = LastObsResults.Except(model => model.ObsName == "Whatever")
.ToList()
.AsObservable();
这将为您创建一个更新的ObservableCollection,其中包含除命名项之外的所有项目。
答案 3 :(得分:-1)
如果您想删除所有项目,可以使用:
LastObsResults .Clear();
如果您想创建自己的扩展方法,可以执行以下操作:
public static class ObservableCollectionExtensions
{
public static int Remove<T>(
this ObservableCollection<T> coll, Func<T, bool> condition)
{
var itemsToRemove = coll.Where(condition).ToList();
foreach (var item in itemsToRemove)
{
coll.Remove(item);
}
return itemsToRemove.Count;
}
}
使用上面的扩展程序,您可以删除与传递的条件匹配的所有项目。例如:
LastObsResults.Remove(x =&gt; x.ObsName == myName);
最后,您可以使用现有的collection.Remove()方法,但请确保像described here一样使用它来避免一个非常常见的问题。