2016-03-22 9 views
2

Ich habe Silverlight-Anwendung, die jede 1 Sekunde die beobachtbare Sammlung ändert, aber was passiert ist, dass nach dem Sortieren die Sortierung abgebrochen wird. wie kann ich es lösen? dies jeweils 1 Sekunde passiert:Sortierung wird nach Änderung der Datenquelle gelöscht

private async void ClockTimerOnTick(object sender, EventArgs eventArgs) 
{ 
    var allOpenTrades = await NewAPI.GetOpenTrades(); 
    var openLongTrades = allOpenTrades.Where(x => x.gameType == (int)GameType.LongTerm); 
    LongTermModel.Open = new ObservableCollection<OpenTranasctionLongTerm> 
    (openLongTrades.Select(x => new OpenTranasctionLongTerm 
    {     
     isPut = x.CallPutStatusId == 2, 
     DateTraded = x.TransactionCreatedOn.ToLocalTime(), 
     Expiration = x.optionExpirationTime.ToLocalTime(), 
     Payout = x.OptionWinReturn, 
     Security = x.OptionName, 
     StrikePrice = x.TransactionQuote, 
     Traded = x.Amount, 
     Currency = UserCurrency, 
     isCall = x.CallPutStatusId == 1, 
     Type = x.CallPutStatusId == 1 ? "Call" : "Put" 
    }).ToList()); 
} 
+0

was meinst du mit "nachdem du sortierst die art ist cancled"? Kannst du deine Frage etwas weiter ausarbeiten? –

+0

https://media.giphy.com/media/3osxYvir0B3KjzRz9u/giphy.gif das ist, was passiert, ich erfrische es alle cool dann aktualisiert es seine Daten und die Art ist cancled @RafiqueMohammed –

+0

@sichart Können Sie den Typ von ItemsControl Sie angeben verwenden (DataGrid oder ListView)? Haben Sie eine Drittanbieter-Kontrolle als Sicht? – Ilan

Antwort

1

Wie ich Ihnen (erstellen Sie eine neue beobachtbaren Sammlung) zurückgesetzt sehen Ihre Sammlung jeder Timer-Tick, also meiner Meinung nach, die sort description eines Itemssource des Datagrid wird gelöscht. Ich denke, dass, wenn Sie Ihren Code für die Neuerstellung (Erstellen der neuen beobachtbaren Sammlung) durch den nächsten Code ersetzen, es Ihnen helfen wird, die Sortierbeschreibung des Ursprungs beizubehalten.

Ein neuer ClockTimerOnTick Methodencode

private void ClockTimerOnTick(object sender, EventArgs eventArgs) 
    { 
     var allOpenTrades = NewAPI.GetOpenTrades(); 
     var openLongTrades = allOpenTrades.Where(x => x.gameType == (int)GameType.LongTerm).ToList(); 
     //I'm assuming here that the LongTermModel.Open is an observable collection 
     LongTermModel.Open.Clear(); 
     openLongTrades.ForEach(term => 
     { 
      LongTermModel.Open.Add(new OpenTranasctionLongTerm 
      { 
       isPut = x.CallPutStatusId == 2, 
       DateTraded = x.TransactionCreatedOn.ToLocalTime(), 
       Expiration = x.optionExpirationTime.ToLocalTime(), 
       Payout = x.OptionWinReturn, 
       Security = x.OptionName, 
       StrikePrice = x.TransactionQuote, 
       Traded = x.Amount, 
       Currency = UserCurrency, 
       isCall = x.CallPutStatusId == 1, 
       Type = x.CallPutStatusId == 1 ? "Call" : "Put" 
      }); 
     }); 
    } 

Hier haben wir die LongTermModel.Open Sammlung jedes Zeitgeberablaufstatusbit nur klar und neu füllen.

Grüße.

+0

funktioniert wie Magie !!! Vielen Dank :) –