2012-07-09 27 views
0

我想在Visual Studio Express 2012 RC中創建一個應用程序。我下載了一些JSON數據並將其反序列化。但將數據綁定到列表框後,不是顯示實際內容,而是在文本塊中顯示project-name.page-name+Datum使用json數據在windows 8 metro風格的應用程序中的數據綁定(c#)

這裏是XAML代碼的一部分:

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="687" Margin="10,71,0,0" VerticalAlignment="Top" Width="1346" ItemsSource="{Binding data}"> 
    <TextBlock x:Name="textblock1" TextWrapping="Wrap" Height="50" Width="443" Text="{Binding name}" /> 
</ListBox> 

這裏是xaml.cs代碼部分

public class RootObject 
{ 
    public List<Datum> data { get; set; } 

} 
public class Datum 
{ 
    public string name { get; set; } 
} 

這是我使用到的代碼反序列化JSON數據

stream loading = await load.GetStreamAsync(....); 
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject)); 
RootObject loaded = (RootObject) ser.ReadObject(loading); 
listbox1.DataContext = loaded; 

有誰能告訴我我的代碼有什麼問題嗎?我在Windows Phone應用程序中使用了相同的功能,並且它工作正常,只是我在其中使用了webclient。

請幫忙。

回答

0

您已將UIElement添加到ListBox的Items集合中。讓項目顯示你想要的東西的正確方法是應用ItemTemplate。您可以內嵌或參考資源。

<ListBox ItemsSource="{Binding data}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding name}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate 
</ListBox> 

它應該與該設置一起工作,但我沒有測試過它。如果工作成功,請記住將其標記爲答案,以便其他人可以從您的詢問中學習。

旁註

我也建議擦洗任何非基本屬性的示例代碼,爲它的價值。並避免硬編碼的寬度/邊距值 - 允許應用程序元素按比例自行調整大小。

+0

感謝和旁註說,我只是測試我的應用程序,一旦它的工作,我會重新設計它......我不太瞭解xaml你能告訴我爲什麼它不會使用我的方法?我的意思是我只是添加一個列表框,然後從控件的文本塊,所以一切都是自動的?....我現在要嘗試你的方法 – prolific 2012-07-09 16:43:49

+0

@ user1489610當你在列表框中添加一個TextBlock時,它認爲你想添加它到項目集合,但是你已經設置了一個ItemsSource,所以這兩個將會發生衝突。你看到的主要問題是它*顯示項目,但它顯示項目類型,因爲你沒有設置ItemTemplate。如果你定義了一個像我向你展示的那樣,它將顯示該項目作爲你定義的任何東西。你甚至可以用多個TextBlocks,Images,矩形設置一個複雜的面板 - 無論你喜歡什麼。 – erodewald 2012-07-09 16:47:02

+0

是的你的方法工作得很好......但我仍然想知道爲什麼我的方法不工作,我怎麼知道我必須在代碼中添加項目模板和數據模板.....我是學習者並試圖瞭解事情是如何工作的以及我如何能夠自己達成解決方案......所以,任何幫助都可以正常工作......再次感謝 – prolific 2012-07-09 16:47:53

相關問題