私は rssreader をコーディングしようとしていますが、いくつかのアーキテクチャのヒントをいただければ幸いです。私のリーダーのメイン ウィンドウは、フレームに読み込まれる 2 つの wpf ページをホストします。これは、ユーザーが異なる RSS プロバイダーを選択できる「ボトムバー」です。メイン フレーム (またはページ) には私のリストビューがあります。ローディング アニメーションと UI フリーズのため、監視可能なコレクションに RSS データを入力するバックグラウンド ワーカーを持つ追加のクラスがあり、デバッグ時にコレクションが正しく入力されます。メインページで、データコンテキストをこの観察可能なコレクションに設定していますが、リストビューには何も表示されません。ここで立ち往生しています。
それが私が持っているものです:
メインページ XAML:
> <ListBox ItemsSource="{Binding}" DisplayMemberPath="RssTitle"
> IsSynchronizedWithCurrentItem="True"
> SelectionChanged="itemsList_SelectionChanged"
> ItemContainerStyle="{DynamicResource listboxitem_style}" Height="396"
> HorizontalAlignment="Left" Margin="126,12,0,0" Name="ListBox1"
> VerticalAlignment="Top" Width="710"></ListBox>
ListBox1.DataContext = GetRssItems.observable_list;
別の RSS フィードを取得するためのボトムページ:
GetRssItems getitems = new GetRssItems();
GetRssItems.observable_collection = null;
getitems.start_bg_worker("url");
GetRssItems.cs
public class GetRssItems
{
public static ObservableCollection<RSSItem> observable_collection { get; set; }
public static string tmp_url;
public BackgroundWorker worker = new BackgroundWorker();
public void start_bg_worker(string url)
{
if (!worker.IsBusy)
{
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync(url);
}
}
}
BackgroundWorkers DoWork では、linq を使用して rss アイテムを受け取り、監視可能なコレクションに追加します。
observable_collection.Add(new RSSItem(item.tmp_Title, item.tmp_Link, item.tmp_Description, item.tmp_pubDate, item.tmp_ImageUrl));
別のクラス RSSItem.cs
public class RSSItem
{
public string RssTitle { get; set; }
public string RssLink { get; set; }
public string RssDescription { get; set; }
public string RsspubDate { get; set; }
public string RssImageUrl { get; set; }
public RSSItem(string rsstitle, string rsslink, string rssdescription, string rsspubdate, string rssimageurl)
{
RssTitle = rsstitle;
RssLink = rsslink;
RssDescription = rssdescription;
RsspubDate = rsspubdate;
RssImageUrl = rssimageurl;
}
}
お時間とヒントをありがとう。よろしくお願いします