2012-04-12 12 views
0

Ich versuche nur etwas Grundlegendes zu tun und stehe fest. Ich möchte eine beobachtbare Sammlung in meiner Modellklasse initialisieren (siehe Code unten) und kann es nicht funktionieren lassen. Ich habe _ für den Teil eingesetzt, der nicht funktioniert.Observable Collection mit der anonymen Methode initialisieren

Kann jemand bitte geben Hinweise

public class StockModel : ObservableCollection<KeyValuePair<string, TickerDetails>> 
{ 
    #region Properties 
    public string TickerSymbol { get; set; } 
    public TickerDetails Ticker { get; set; } 
    #endregion 

    public StockModel() 
    { 
     init(); 
    } 

    public void init() 
    { 
     Add(new KeyValuePair<string, TickerDetails> { "ABC", new TickerDetails {TickerName="ABC", LastPrice=30, Ask=40, Bid=50, Volume=60 }}); 
    } 

    public ObservableCollection<KeyValuePair<string, TickerDetails>> getData() 
    { 
     return this; 
    } 
} 

public class TickerDetails 
{ 
    public string TickerName { get; set; } 
    public int LastPrice { get; set; } 
    public int Bid { get; set; } 
    public int Ask { get; set; } 
    public int Volume { get; set; } 
} 

Ich weiß, dass ich die traditionelle Art und Weise (wie unten) tun können, wollen aber die obige Methode

Dictionary<int, StudentName> students = new Dictionary<int, StudentName>() 
{ 
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, 
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}}, 
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}} 
}; 
+0

Sind Sie sicher, dass StockModel tatsächlich ObservableCollection erben soll? Es ist unklar, was StockModel sein soll, da es eine einzige Zeichenkette als Ticker und einen einzigen Satz von Details hat, und dennoch eine Sammlung ... – Chris

+0

Eine Kuriosität, in Ihrer Add() - Methode fügen Sie einen anderen Typ hinzu die ObservableCollection. Die Sammlung hat KVP > und Sie fügen eine KVP hinzu. –

+0

Ja - Der Grund dafür ist, dass dies das Modell ist, das dann in ViewModel eingefügt und in der Ansicht angezeigt wird. Dies ist die Mini-Version von StockModel - muss noch weitere Eigenschaften für Diff-Charting-Controls hinzufügen, die auf diesem StockModel basieren – Patrick

Antwort

2

Blick auf die Art auf dem geerbten ObservableCollection:

ObservableCollection<string, List<int>> 

Das macht Ihre Art eine Sammlung von Zeichenketten und Listen, keine Strings und TickerDetails. Ändern Sie den geerbten Typ in string, TickerDetails und Sie können initialisieren. Sie müssen jedoch auch die Signatur von getData() ändern, damit sie der neuen geerbten Signiture entspricht, oder eine Transformation von TickerDetails zu List bereitstellen. Int

0

Ist das nicht

Add(new KeyValuePair<string, object> { "ABC", new TickerDetails { TickerName = "tick tock", LastPrice = 10 }}); 
lernen

?

Sie müssen nur eine neue TickerDetails instanziieren.

Wie dem auch sei, die keinen ObservableCollection<KeyValuePair<string, List<int>>> überein, so ist es mehr wie:

Add(new KeyValuePair<string, List<int>> { "ABC", new List<int> { 1, 2, 3, 4 }}); 

EDIT: mit Ihrem neuesten bearbeiten, das erste Beispiel funktionieren sollte.

+0

Oder vielleicht 'Add (new KeyValuePair (" ABC ", new TickerDetails {TickerName =" tick tack ", LastPrice = 10}));' da der Elementtyp "KVP " ist und KVP einen Konstruktor mit Schlüssel- und Wertargument hat. – Clemens

+0

Ja, ich korrigiere, ich habe gerade bearbeitet, als er gerade bearbeitet hat;) –

+0

Sorry, seit ich die falsche Version des Codes gepostet habe. Habe jetzt auf die richtige aktualisiert und erhalte immer noch diesen Fehler - Typ 'System.Collections.Generic' kann nicht initialisiert werden.KeyValuePair mit einem Auflistungsinitialisierer, da System.Collections.IEnumerable nicht implementiert wird – Patrick

Verwandte Themen