еще одна проблема: Мы сейчас в ModLoader, с функцией просмотра, которая отлично работает с обычным ListView. Но нам нужно отобразить изображение на SubItem, поэтому ObjectListView оказался очень удобным.Как правильно добавить элементы в ObjectListView?
Как только я запустил программу, я получил InvalidCastException, потому что я не использовал SetObjects(), поэтому я создал список типов TroveSaurusMods и класс, который называется тем же. Добавление элементов просто отлично работает, но элементы не отображаются в OLV. Может кто-то помочь мне с этим? И после этого, помогите мне с отображением изображения?
Вот мой код для добавления элементов:
private void getMods(ref ObjectListView location)
{
var lstItems = new List<TroveSaurusMod>();
logger.log("Trying to add mods from TroveSaurus to the list...", Logger.logLevel.INFO);
try
{
using (var webClient = new System.Net.WebClient())
{
var jsonWeb = webClient.DownloadString("API LINK HERE");
string json = js.Deserialize(new JsonTextReader(new System.IO.StringReader(jsonWeb))).ToString();
jtr = new JsonTextReader(new System.IO.StringReader(json));
JArray a = JArray.Parse(json);
for (int i = 0; i < a.Count; i++)
{
var element = a[i];
JsonTextReader arRead = new JsonTextReader(new System.IO.StringReader(element.ToString()));
OLVListItem item = null;
lvBrowse.SmallImageList = imgSmall;
while (arRead.Read())
{
if (arRead.Value != null)
{
if (arRead.Value.ToString() == "id")
{
item = new OLVListItem(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "name")
{
item.SubItems.Add(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "author")
{
item.SubItems.Add(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "type")
{
item.SubItems.Add(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "subtype")
{
item.SubItems.Add(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "fileid")
{
item.SubItems.Add(arRead.ReadAsString());
}
if (arRead.Value.ToString() == "filedate")
{
item.SubItems.Add(UnixTimeStampToDateTime(Double.Parse(arRead.ReadAsString())).ToShortDateString());
}
}
}
//item.ImageIndex = i;
lstItems.Add(new TroveSaurusMod(item.Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[3].Text, item.SubItems[4].Text, item.SubItems[5].Text, item.SubItems[6].Text));
logger.log("Successfully added " + item.Text + " to the list!", Logger.logLevel.FINE);
}
lvBrowse.SetObjects(lstItems.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show("Unable to retrieve mod list from TroveSaurus! Please check your internet connection!", "Error parsing mods");
logger.log(ex.StackTrace.ToString(), Logger.logLevel.ERROR);
throw;
}
}
И мой класс TroveSaurusMods:
public class TroveSaurusMod
{
public string Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public string Type { get; set; }
public string SubType { get; set; }
public string FileId { get; set; }
public string FileDate { get; set; }
public TroveSaurusMod(string id, string name, string author, string type, string subtype, string fileId, string fileDate)
{
Id = id;
Name = name;
Author = author;
Type = type;
SubType = subtype;
FileId = fileId;
FileDate = fileDate;
}
}
Я никогда не работал со списками, только с ListView. Скажите, пожалуйста, если я сделал что-то не так, и то, что мне нужно изменить :) Спасибо
EDIT: Нашел ответ ... нужно установить AspectName: D