清除属性时,字段显示为ObservableCollection

时间:2017-10-09 12:28:25

标签: c# xamarin.forms

我对XAML / Xamarin比较陌生,而且我遇到了一些我希望有人可以帮我澄清的事情。

我知道标题有误导性,但我不能说它有任何不同。

我的ViewModel中有以下属性:

private ObservableCollection<Schedule> _scheduleList;
public ObservableCollection<Schedule> ScheduleList
{
    get
    {
        return _scheduleList;
    }

    set
    {
        value = _scheduleList;
    }
}

在某个地方,我做了类似的事情:

private void DayFilter(string week)
{
    try
    {
        var list = _scheduleList.Where(x => x.ScheduleDate.DayOfWeek.ToString() == week);

        ObservableCollection<Schedule> newlist = new ObservableCollection<Schedule>(list);

        ScheduleList.Clear(); // <- this line clears out _scheduleList as well

        foreach (var item in newlist)
        {
            ScheduleList.Add(item);
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

每当调用ScheduleList.Clear()时,它也会清除_scheduleList这是私有字段。

我知道这与ObservableCollection这个事实有关,但要求是它应该是,我找不到保留_scheduleList上的值的方法,因为我需要这个字段在整个应用程序的生命周期中填充。

是否离开了_scheduleList字段未被清除?

1 个答案:

答案 0 :(得分:5)

这就是C#的工作原理

ScheduleList.Clear();

返回对_scheduleList的引用(即公众得到的内容),然后在其上调用Clear。

在您的方案中,您可能需要维护两个完全独立的数据副本 - 原始数据,以及用于过滤/显示数据的数据副本。