0

こんにちは、xml からデータをロードし、最初のアイテムをテキストブロックにバインドしたいのですが、DataContext = myclass.articles[0] を指定しようとすると、ロードが完了していないためエラーがスローされます。ロード時にデータをバインドするにはどうすればよいですか。

 public class ArticleViewModel
{

    public ArticleViewModel()
    {
        articles = new ObservableCollection<Article>();
    }
    public ObservableCollection<Article> articles;

    public void LoadArticle(int Cat_ID)
    {
        DownloadFile("http://www.loadarticle.com/Rss.asp?id=" + Cat_ID);
     }
    public  string xml;
    public  void DownloadFile(string url)
    {
        string sonuc = "";
        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += wc_DownloadStringCompleted;
        wc.DownloadStringAsync(new Uri(url));
     }

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        xml = e.Result;
        XDocument doc = XDocument.Parse(xml);
        var articless = (from i in doc.Element("rss").Element("channel").Elements()
                    where i.Name == "item"
                    select new Article { Baslik = i.Element("title").Value, Detay = i.Element("description").Value });

        foreach (Article artic in articless)
        {
            this.articles.Add(artic);
        }


    }

Page.Xaml.cs

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        string kategori_refno = "";
        if (NavigationContext.QueryString.TryGetValue("kategori_refno", out kategori_refno))
        {
            ArticleViewModel fm = new ArticleViewModel();
            fm.LoadArticle(Convert.ToInt32(kategori_refno));

                DataContext = fm.articles[0];
        }
    }

Xaml

  <TextBlock x:Name="tbKategori_Adi" Text="{Binding Baslik,Mode=TwoWay}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
<TextBlock x:Name="tbFikra" TextWrapping="Wrap" Text="{Binding Detay,Mode=TwoWay}" Margin="0,0,0,70"/>
4

1 に答える 1

0

いくつかのこと:

  1. ページ全体の DataContext を ArticleViewModel にします。
  2. INotifyPropertyChangedインターフェイスを使用して、データ バインディングが変更されたときに UI に通知することを検討してください。
  3. FirstArticle という名前のプロパティまたはTextBlocks をバインドするようなものがあります。データが正常にダウンロードされたら、このプロパティを設定します。INotifyPropertyChanged と組み合わせると、データが読み込まれたときに UI が更新されます。
于 2013-01-23T06:12:01.367 に答える