2010-11-10 48 views
0

我試圖訪問在線XML文件並在Windows Phone 7 Silverlight應用程序中顯示它的內容。我沒有收到任何錯誤,但是當模擬時,XML文件中沒有顯示任何內容。從我在網上收集到的信息來看,我只是簡單地把事情搞亂了。我只是不確定是什麼。Silverlight WP7應用程序不顯示XML內容

MainPage.xaml.cs中:

namespace TwitterMix 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 


    private void GetRoster() 
    { 
     WebClient rstr = new WebClient(); 

     rstr.DownloadStringCompleted += new DownloadStringCompletedEventHandler(roster_DownloadStringCompleted); 
     rstr.DownloadStringAsync(new Uri("http://www.danfess.com/data.xml")); 
    } 

    void roster_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error != null) 
      return; 

     XElement xmlPersons = XElement.Parse(e.Result); 

     var list = new List<RosterViewModel>(); 

     foreach (XElement person in xmlPersons.Elements("person")) 
     { 
      var name = person.Element("name").Value; 
      var age = person.Element("age").Value; 


      list.Add(new RosterViewModel 
      { 
       Name = name, 
       Age = age, 
      }); 
     } 

     rosterList.ItemsSource = list; 
    } 


    public class RosterViewModel 
    { 
     public string Name { get; set; } 
     public string Age { get; set; } 
    } 


} 
} 

MainPage.xaml中:

<Grid x:Name="ContentPanel" Grid.Row="1"> 
     <ListBox HorizontalAlignment="Left" Name="rosterList" VerticalAlignment="Top" Width="468" Height="600"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Height="132"> 
         <StackPanel Width="370"> 
          <TextBlock Text="{Binding Name}" Foreground="White" FontSize="28" /> 
          <TextBlock Text="{Binding Age}" TextWrapping="Wrap" FontSize="24" Foreground="White" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

最後的XML文件的內容:

<?xml version="1.0" encoding="utf-8" ?> 

<roster> 

<person> 
<name>Blake</name> 
<age>25</age> 
</person> 

<person> 
<name>Jane</name> 
<age>29</age> 
</person> 

<person> 
<name>Bryce</name> 
<age>29</age> 
</person> 

<person> 
<name>Colin</name> 
<age>29</age> 
</person> 

</roster> 

任何意見或建議,當然,非常感謝。謝謝大家的幫助!

+0

X-Ref:http://stackoverflow.com/questions/4138694/connect-to-xml-file-at-web-address-for-wp7-app – 2010-11-11 09:25:59

回答

1

我認爲你的問題是從DownloadStringCompleted的回調是在UI線程以外的線程上執行的。 Listbox或者plain會忽略你或者拋出一個被調用線程吞下的異常。

您需要在分配itemssource屬性之前切換到UI線程。

Dispatcher.Current.BeginInvoke((Action)(()=>rosterList.ItemsSource = list)); 

同樣爲分配給一個數據綁定到UI元素

+0

這解決了一切!我無法告訴你,當它真正起作用時我有多興奮,哈哈。無可否認,我比我咀嚼蝙蝠更糟糕,犯了一個愚蠢的錯誤。再次感謝你的幫助! – Dan 2010-11-11 02:31:35

0

如果你弄清楚這是如何以不同的順序工作的話,我會非常感興趣的看到它。我不得不增加大量的開銷來實現它。我得到它的工作方式是我的數據類(你的rosterviewmodel)從INotifyPropertyChanged繼承和所有暗示。初始化我的數據對象時,我在數據對象的屬性更改事件上設置了一個處理程序。然後在處理程序中,您要做的就是將您的堆棧面板的DataContext設置爲剛剛更改的對象。

0

任何財產您是否已經驗證列表被填充?在綁定到rosterList之前設置一個斷點並檢查list.Count。

你可以只加載XML像

XDocument xmlPersons = XDocument.Load(e.Result); 

    var list = from query in xmlPersons.Descendants("person") 
        select new RosterViewModel 
        { 
         Name = (string)query.Element("name"), 
         Age = (int)query.Element("age") 
        }; 


    rosterList.ItemsSource = list; 

(手動編輯使用您的VAR名稱代碼 - 未測試)。

相關問題