2017-10-09 110 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