我对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
字段未被清除?
答案 0 :(得分:5)
这就是C#的工作原理
ScheduleList.Clear();
返回对_scheduleList的引用(即公众得到的内容),然后在其上调用Clear。
在您的方案中,您可能需要维护两个完全独立的数据副本 - 原始数据,以及用于过滤/显示数据的数据副本。