2012-04-12 10 views
0

Просто пытаюсь сделать что-то основное и застрял. Хотите инициализировать наблюдаемую коллекцию в моем классе модели (см. Код ниже), и, похоже, он не работает. Я поместил _ за деталь, которая не работает.Инициализировать наблюдаемую коллекцию с помощью анонимного метода

Может кто-нибудь пожалуйста, предоставьте указателям

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

Я знаю, что я могу сделать традиционный способ (как показано ниже), но хочу узнать описанную методику

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

Вы действительно хотите, чтобы StockModel фактически наследовал ObservableCollection? Его непонятно, что вы хотите, чтобы StockModel был, поскольку он имеет одну строку в качестве Тикера и один набор деталей, но представляет собой коллекцию ... – Chris

+0

Одна странность, в вашем методе Add() вы добавляете другой тип ObservableCollection. В коллекции есть KVP > и вы добавляете KVP . –

+0

Да - причина, по которой я его создаю, заключается в том, что это модель, которая затем будет введена в ViewModel и далее отображена в виде. Это мини-версия StockModel - по-прежнему нужно добавить дополнительные свойства для Diff charting controls, все из которых будут основаны на этом StockModel. – Patrick

ответ

2

Посмотрите типа на вашем унаследованной ObservableCollection:

ObservableCollection<string, List<int>> 

Это делает ваш тип коллекции строк и списков, а не строк и TickerDetails. Измените свой унаследованный тип на строку, TickerDetails, и вы сможете инициализировать. Однако вам также нужно будет изменить ссылку getData(), чтобы соответствовать новой унаследованной ссылке, или предоставить преобразование из TickerDetails в List, Int

0

не то, что

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

?

Вам просто нужно создать экземпляр нового TickerDetails.

Во всяком случае, это не совпадать с ObservableCollection<KeyValuePair<string, List<int>>> так это больше похоже:

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

EDIT: с последней правкой, первый пример должен работать.

+0

Или, возможно, 'Добавить (новый KeyValuePair (" ABC ", новый TickerDetails {TickerName =" tick tock ", LastPrice = 10}));' поскольку тип элемента - это 'KVP ', а KVP имеет конструктор с аргументом key и value. – Clemens

+0

Да, я исправил, я редактировал, когда он редактировал;) –

+0

Извините, так как я опубликовал неверную версию кода. Теперь обновили до правильного, и я все еще получаю эту ошибку. Не могу инициализировать тип «System.Collections.Generic.KeyValuePair с инициализатором коллекции, поскольку он не реализует System.Collections.IEnumerable – Patrick

Смежные вопросы