#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
? @ElementalPete3. Это зависит от того, что делает 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);
}