如何在列表视图中显示图片?

时间:2016-12-14 03:06:12

标签: c# visual-studio listview xamarin xamarin.forms

我有一个需求列表,每个需求都有我从json中提取的属性,目前我认为我只对JSON中的typeName和requisiteStatusId属性感兴趣。这两个是与要求类型(考试,阅读文章等)及其当前状态相对应的图像的属性。

我已经可以在listview中显示图像,但是我必须显示与typeName和requisiteStatusId对应的图像,例如

{
    "id": 1221,
    "name": "Visibility - Public Acknowledgement",
    "description": "Acknowledgement from Omar during a Q Meeting",
    "typeId": 11,
    **"typeName": "Proven XP",**
    "validationId": null,
    "skillId": 131,
    "skillName": "Visibility",
    "material": "No Material",
    "materialUrl": "#",
    **"requisiteStatusId": 4,**
    "trailName": "General Knowledge",
    "trailId": 5,
    "levelId": 1    
},

依赖于这两个你必须显示相应的图像,有三种状态和10种类型,现在我以这种方式直接显示图像,例如:

 public class CustomVeggieCell : ViewCell
 {
    public CustomVeggieCell()
    {
        var image = new Image
        {

        };
        var image2 = new Image
        {
        };
        var nameLabel = new Label
        {

            VerticalTextAlignment = TextAlignment.Center,
            TextColor = Color.FromHex("#FF9E9E9E"),
        };

        var horizontalLayout = new StackLayout()
        {

        };
        //set bindings

        nameLabel.SetBinding(Label.TextProperty, "Name", BindingMode.TwoWay);


        image.Source = "book.png";
        image2.Source = "Palomitashida.png";
        //Set properties for desired design
        horizontalLayout.Orientation = StackOrientation.Horizontal;

        image2.HorizontalOptions = LayoutOptions.EndAndExpand;
        nameLabel.HorizontalOptions = LayoutOptions.StartAndExpand;
        nameLabel.VerticalOptions = LayoutOptions.Center;
        nameLabel.TextColor = Color.FromHex("#FF9E9E9E");
        //add views to the view hierarchy
        horizontalLayout.Children.Add(image);
        horizontalLayout.Children.Add(nameLabel);
        horizontalLayout.Children.Add(image2);

        View = horizontalLayout;


    }
}

我不知道如何从json中提取属性或如何验证它以便使用从json中提取的id告诉我什么类型和状态是要求,我留下它们的图像以便它可以是在上下文中更多 enter image description here

1 个答案:

答案 0 :(得分:0)

使用来自here的Nuget的NewtonSoft JSON。您可以通过在解决方案资源管理器中右键单击项目,从Visual Studio将NuGet包添加到项目中。管理NuGet包。

这是我为您创建的课程要求:

public class Requirement
{
    public int id { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public int typeId { get; set; }
    public string typeName { get; set; }
    public object validationId { get; set; }
    public int skillId { get; set; }
    public string skillName { get; set; }
    public string material { get; set; }
    public string materialUrl { get; set; }
    public int requisiteStatusId { get; set; }
    public string trailName { get; set; }
    public int trailId { get; set; }
    public int levelId { get; set; }
}

您可以使用以下代码使用NewtonSoft反序列化JSON:

var item = JsonConvert.DeserializeObject<Requirement>("JSON String goes here");

这将符合一项要求。您可能会有一组JSON对象或其他一些结构,因此请根据您的结构调整代码。

您现在可以使用上面反序列化的item来读取它的值。

如果您将json(没有最后一个逗号和已添加的**)放入文本文件并将文本文件放在bin / debug文件夹中进行快速测试,那么可以将JSON反序列化像这样:

var item = JsonConvert.DeserializeObject<Requirement>(File.ReadAllText("Json.txt"));