我試圖編寫一個rssreader,並且會對某些架構提示感到滿意。 我的閱讀器主窗口包含兩個加載到框架中的wpf頁面,這是一個「底部欄」,用戶可以選擇不同的rss提供程序。在主框架(或頁面)是我的列表視圖。 由於加載動畫和UI凍結我有一個額外的類與backgroundworker填充RSS數據的可觀察集合,當我調試時,它正確填充我的集合。 在主頁我設置datacontext這個可觀察的收藏,但列表視圖不顯示任何東西,在這裏我卡住了。Binding ObservableCollection of objects trouble
這就是我:
XAML的MainPage:
> <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;
Bottompage得到另一個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;
}
}
感謝您的時間和提示。 問候
哦,你說得對,命名實際上是非常可怕的。試圖改變我的列表框,當你回答,但它不起作用。 Bindings屬性中的observable_collection是否已知? – nukleos 2012-07-22 16:14:10
許多感謝Nahum,它現在正在工作:) – nukleos 2012-07-22 22:07:33
@nukleos即使是一次性使用5行代碼,也永遠不會寫出錯誤命名的代碼。 再次閱讀有關MVVM模式後,我建議您結帳 MVVMLight或Prism框架。將爲您節省大量麻煩。 – Nahum 2012-07-23 06:12:33