こんにちは、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"/>