簡體   English   中英

Windows Phone的ListBox中的Json to C#對象顯示

[英]Json to C# object display in Windows Phone's ListBox

我使用http://json2csharp.com從下面的JSON字符串生成C#類。

{
    "stationArr":[
        {
            "id":"9",
            "name":"name9",
        "sidebar":{
                "original":"http://myurl.com/station_images/5/5_s.png",
                "m":"http://myurl.com/station_images/5/m/5_s_m.png",
                "s":"http://myurl.com/station_images/5/s/5_s_s.png"
            }
        },
    {
            "id":"3",
            "name":"name3",
        "sidebar":{
                "original":"http://myurl.com/station_images/5/5_s.png",
                "m":"http://myurl.com/station_images/5/m/5_s_m.png",
                "s":"http://myurl.com/station_images/5/s/5_s_s.png"
            }
    ]
    "stationUrlMap":{
        "9":"http://myurl.com/9_64",
        "3":"http://myurl.com/3_64",
    }
}

生成的類是(我為每個類創建了不同的.cs。

public class Sidebar
{
    public string original { get; set; }
    public string m { get; set; }
    public string s { get; set; }
}

public class StationArr
{
    public string id { get; set; }
    public string name { get; set; }
    public Sidebar sidebar { get; set; }
}

/*public class StationUrlMap
{
    public string __invalid_name__9 { get; set; }
    public string __invalid_name__3 { get; set; }
}
*/
public class StationList
{
    public List<StationArr> stationArr { get; set; }
//    public StationUrlMap stationUrlMap { get; set; } Dicarded it
}

由於不需要,我已經丟棄了StationUrlMap。

我正在使用以下代碼創建對象

string resultString = sd.ReadToEnd();
StationList stations = JsonConvert.DeserializeObject<StationList>(resultString);
Debug.Writeline(stations.stationArr.Count); // gives Output 9 Which is correct.

我只是不知道如何在UI中顯示電台列表(使用ListBox)。 請指引我正確的方向。

在XAML中創建一個列表框

<ListBox x:Name="ListBoxStations" Height="500" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Width="450">
                 <Image Source="{Binding Path=sidebar.original}"/>
                 <TextBlock Text="{Binding Path=name}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然后在您的cs文件中,在json轉換后執行以下操作

StationList stations = JsonConvert.DeserializeObject<StationList>(resultString);
ListBoxStations.ItemsSource = stations.stationArr;

上面的XAML代碼只是一個示例,可以根據您的要求進行更改。

有兩種方法。

首先,您可以將列表框的ItemSource屬性設置為剛創建的列表。

其次,您可以在列表中創建事物的ObservableCollection ,並將observable集合綁定到列表框的ItemSource屬性。 在Observable Collection中添加項目,這些項目將顯示在您的列表框中。

第二種方法使您可以更好地控制lisbox中的項目。 您可以在可觀察的集合中刪除或添加元素,這些元素將反映在列表框的內容中。 第一種方法將使列表的內容為只讀,並且您將無法在列表中添加或刪除項目。

http://msdn.microsoft.com/en-us/library/ms668604.aspx

http://msdn.microsoft.com/zh-cn/library/system.windows.controls.listbox%28v=vs.95%29.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM