2017-10-09 185 views
0

我是XAML/Xamarin的新手,我遇到了一些我希望能够帮助我澄清的东西。当属性被清除时,作为ObservableCollection的字段被清除

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

我在我的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

当调用Clear()时,你还希望发生什么? (这与ObservableCollection无关,但这是因为公共属性ScheduleList只返回包含在私有'_scheduleList'字段中的实例) – bassfader

+0

@bassfader,我想清除ScheduleList属性,所以我可以用新的值填充它。被认为是创造第二个领域,这将是只读领域,应该工作,对吧? – JadedEric

回答

5

这是C#是如何工作的

ScheduleList.Clear(); 

返回_scheduleList参考(这是公共的get做什么),然后调用它清除。

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

+0

这就是我在C#中所做的,认为在XAML中有一种“幻想”的方式。谢谢@Jason – JadedEric