Передать GenericList в наблюдаемую коллекцию

#c# #xamarin

#c# #xamarin

Вопрос:

У меня есть общий список

 GetAllSponsor sponsorlist = new GetAllSponsor();
sponsorlist.getallsponsor();
string spnsrlst = sponsorlist.ToFormattedJsonString();

Sponsors sponsorObjectData = JsonConvert.DeserializeObject<Sponsors>(spnsrlst);
  

Вот определение класса спонсоров выглядит следующим образом:

 public class Sponsors
        {
            public string id { get; set; }
            public string company_name { get; set; }
            public string description { get; set; }
            public string sponsor_level { get; set; }
            public string picture { get; set; }
            public string location { get; set; }
            public string website_url { get; set; }
            public string sm_twitter { get; set; }
            public string sm_facebook { get; set; }
            public string sm_linkedin { get; set; }
            public string sm_pinterest { get; set; }
            public string contact_number { get; set; }
            public string attachments { get; set; }
            public string date_time { get; set; }


        }
  

Мне нужно передать его Observable Collection .

Как я могу это сделать?

Комментарии:

1. Я бы вернул список из GetAllSponsor(). Затем просто перебирайте список, добавляя каждый в ObservableCollection. То, как вы это делаете, я предполагаю, что вы получаете какой-то массив в десериализованном объекте — вы могли бы перебрать это, но кажется неэффективным создавать json и немедленно десериализовать его.

2. Как я могу вернуть список из GetAllSponsor ? @ElementalPete

3. Это зависит от того, что делает GetAllSponsor … Вы получаете информацию из базы данных? Из веб-службы? С жесткого диска?

4. Послушайте, моя проблема в чем. У меня есть адаптер для ссылки на адаптер RecyclerView, как я понял, мне нужно передать наблюдаемую коллекцию этому адаптеру. @ElementalPete

5. Нет. Я получаю json из api. Вы можете увидеть это здесь JSONDownloader @ElementalPete

Ответ №1:

 List<SomeType> list = new List<SomeType>();

// add items to list 

ObservableCollection<SomeType> collection = new ObservableCollection<SomeType>(list);
  

Комментарии:

1. Это работает до тех пор, пока вы делаете это только один раз при инициализации класса, который имеет ObservableCollection . Предполагая, что ObservableCollection используется для привязки, чтобы обновления были видны в представлении, если вы запустите это после привязки к collection, оно не будет передавать эти обновления, потому что это новая ObservableCollection (не та, к которой он привязан)

2. вы должны были включить свой вариант использования в свой вопрос. Но AFAIK единственный способ сделать это с существующей коллекцией — перебирать список и добавлять каждый элемент вручную

Ответ №2:

Подводя итог нашему разговору, я бы переместил код загрузки из этого класса. Класс должен называться Sponsor (поскольку он представляет одного спонсора), и он должен содержать только общедоступные свойства для полей данных, которые вы получаете (ID, имя_компании, описание и т. Д.) JSON, который вы получаете, на самом деле является массивом спонсоров, поэтому вам нужно десериализовать его в a List<Sponsor> или что-то подходящее. Затем просмотрите свой список и добавьте каждого спонсора в ObservableCollection следующим образом:

 foreach (Sponsor s in mySponsors) 
{
   myCollection.Add(s);
}