簡體   English   中英

Silverlight WP7應用程序不顯示XML內容

[英]Silverlight WP7 App Not Displaying XML Contents

我正在嘗試訪問在線XML文件並在Windows Phone 7 Silverlight應用程序中顯示其內容。 我沒有收到任何錯誤,但是當進行仿真時,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>

當然,任何建議都將不勝感激。 謝謝大家的幫助!

我認為您的問題是,DownloadStringCompleted的回調是在UI線程以外的線程上執行的。 列表框要么無視您,要么拋出被調用線程吞沒的異常。

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

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

分配給與UI元素進行數據綁定的任何屬性也是如此

如果您弄清楚它是如何工作的,我將非常感興趣。 我必須增加很多開銷才能使其正常運行。 我使用它的方式是從INotifyPropertyChanged繼承的數據類(您的rosterviewmodel)及其所包含的所有內容。 初始化數據對象時,我為數據對象的propertychanged事件設置了處理程序。 然后,在處理程序中,您要做的是將堆棧面板的DataContext設置為剛剛更改的對象。

您是否已確認正在填充列表? 在綁定到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名稱手動編輯的代碼-未測試)。

暫無
暫無

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

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