2017-10-09 2 views
0

Ich bin relativ neu zu XAML/Xamarin und ich bin auf etwas, ich hoffe, jemand kann mir helfen, zu klären.Feld wie ObservableCollection wird gelöscht, wenn Eigenschaft gelöscht wird

Ich weiß, der Titel ist irreführend, aber ich könnte es nicht anders ausdrücken.

Ich habe die folgende Eigenschaft in meinem Viewmodel:

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

    set 
    { 
     value = _scheduleList; 
    } 
} 

nach unten irgendwo die Linie, das tue ich etwas wie folgt aus:

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; 
    } 
} 

Wenn ScheduleList.Clear() aufgerufen wird, löscht es auch out _scheduleList das ist das private Feld.

Ich weiß, das hat etwas damit zu tun, dass dies ObservableCollection ist, aber die Anforderung ist, dass es sein sollte, und ich konnte keinen Weg finden, den Wert auf _scheduleList zu behalten, da ich dieses Feld in der gesamten Lebensdauer der Anwendung.

Ist da weg, dass das Feld _scheduleList nicht gelöscht wird?

+0

Was erwarten Sie sonst noch, wenn 'Clear()' aufgerufen wird? (Dies hat nichts mit der 'ObservableCollection' zu tun, aber es liegt daran, dass die öffentliche Eigenschaft' ScheduleList' nur die im privaten '_scheduleList' Feld enthaltene Instanz zurückgibt.) – bassfader

+0

@bassfader, ich möchte die ScheduleList-Eigenschaft aus, also Ich kann es mit neuen Werten füllen. Wurde daran gedacht, ein zweites Feld zu schaffen, das nur Lesefeld sein wird, das sollte funktionieren, oder? – JadedEric

Antwort

5

Dies ist nur, wie C#

arbeitet
ScheduleList.Clear(); 

einen Verweis auf _scheduleList gibt (das ist, was die Öffentlichkeit erhalten hat) und dann ruft sie löschen.

In Ihrem Szenario müssen Sie wahrscheinlich zwei vollständig separate Kopien Ihrer Daten verwalten - das Original sowie eines, das Sie zum Filtern/Anzeigen der Daten verwenden.

+0

Das ist, was ich in C# getan hätte, dachte, es gäbe eine "fancy" Art, es in XAML zu machen. Danke @Jason – JadedEric

Verwandte Themen