ListView ItemsSource =“{Binding TrackCollection}”没有数据。请帮我解决一下

时间:2015-11-11 07:06:07

标签: c# mvvm

的Xaml:

<ListView ItemsSource="{Binding TrackCollection}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
..............

JSON:

    public class Track
        {
            public string urn { get; set; }
            public string uri { get; set; }
            public string permalink { get; set; }
            public string permalink_url { get; set; }
            public string title { get; set; }
            public string description { get; set; }
            public string track_type { get; set; }
            public string genre { get; set; }
            public string tag_list { get; set; }
................
         }
 public class RootObject
        {
            public List<Track> tracks { get; set; }
            public string tag { get; set; }
            public string next_href { get; set; }
        }

视图模型:

public ObservableCollection<TracksSoundCloud> TrackCollection = new ObservableCollection<TracksSoundCloud>();

    public async Task GetTrackAsyncTask(string link)
    {
        var result = await StaticMethod.GetJsonStringTask(link);
        if(result!=null)
        {
            var getItem = JsonConvert.DeserializeObject<TracksSoundCloud.RootObject>(result);
            //TrackCollection.Add(getItem.tracks);
        }
    }

如果我使用“TrackCollection.Add(getItem.tracks);”然后

  

严重级代码描述项目文件行错误CS1503参数1:   无法转换   'System.Collections.Generic.List'   至   'EntertaimentGroup.Model.TracksSoundCloud'EntertaimentGroup C:\ Users \ HOANG-PC \ documents \ visual   工作室   2015 \ Projects \ EntertaimentGroup \ EntertaimentGroup \ ViewModel \ TrackSoundCloudViewModel.cs 22

视图模型:

public class StaticMethod
{

    public static async Task<string> GetJsonStringTask(string link)
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage message = await client.GetAsync(link+ "&client_id=9ac2b17027e4af068adbb4f10330e1b3");
        string result = await message.Content.ReadAsStringAsync();
        return result;
    }
}

1 个答案:

答案 0 :(得分:0)

exeption消息说明了一切:getItem.tracksList<Track>TrackCollection的元素属于TrackSoundCloud

您需要将TrackCollection更改为ObservableCollection<TrackSoundCloud>,或者需要转换Track - 对象TrackSoundCloud - 对象。

此外,您正在尝试添加整个集合而不是单个项目。

public ObservableCollection<Track> TrackCollection = new ObservableCollection<Track>();

public async Task GetTrackAsyncTask(string link)
{
    var result = await StaticMethod.GetJsonStringTask(link);
    if(result!=null)
    {
        var getItem = JsonConvert.DeserializeObject<TracksSoundCloud.RootObject>(result);
        foreach ( var item in getItem.tracks)
        {
            TrackCollection.Add(item);
        }
    }
}

public ObservableCollection<TracksSoundCloud> TrackCollection = new ObservableCollection<TracksSoundCloud>();

public async Task GetTrackAsyncTask(string link)
{
    var result = await StaticMethod.GetJsonStringTask(link);
    if(result!=null)
    {
        var getItem = JsonConvert.DeserializeObject<TracksSoundCloud.RootObject>(result);
        foreach ( var item in getItem.tracks)
        {
            TracksSoundCloud t = ConvertTrackToTracksSoundCloud(item);//<-- Needs to be implemented
            TrackCollection.Add(item);
        }
    }
}