。选择不更新视图模型对象的ObservableCollection

时间:2016-02-22 15:12:12

标签: c# linq

我有ObservableCollection FilterableListItem类型(下方),我做了以下查询,

this.Gears.Select(r => r.IsAvailible = r.Value == "X6");

但它不会更新列表中的任何项目。如何让select语句更新列表?

public class FilterableListItem : ViewModelBase
{
    private string value;

    private bool isAvailible;

    public string Value
    {
        get
        {
            return this.value;
        }
        set
        {
            this.value = value;
            this.OnPropertyChanged("Value");
        }
    }

    public bool IsAvailible
    {
        get
        {
            return this.isAvailible;
        }
        set
        {
            if (value != this.isAvailible)
            {
                this.isAvailible = value;
                this.OnPropertyChanged("IsVisible");
            }
        }
    }

    public override string ToString()
    {
        return this.Value;
    }
}

3 个答案:

答案 0 :(得分:2)

尝试使用:

foreach (var r in this.Gears) r.IsAvailible = r.Value == "X6";

答案 1 :(得分:2)

正如我的评论所述,Select不应该用于更新您的对象,而是用于投射集合中的每个元素。

您应该使用标准foreach来更新对象:

foreach (var item in Gears)
    item.IsAvailable = (r.Value == "X6");

这将相应地更新您的商品。

答案 2 :(得分:1)

。选择不更新对象,而是返回IEnumerable的修改对象。试试这个:

this.Gears = new ObesrvableCollection<FilterableListItem>(this.Gears.Select(r => r.IsAvailible = r.Value == "X6"));