2010-10-21 65 views
0

我有一個ListBox,我正在使用它來顯示各種搜索的結果。這些搜索可能會發生在許多不同類型的對象上,並且在所有情況下都會遇到一些麻煩。WPF - 如何重用列表框來顯示不同的對象列表?

大部分時間我可以只設置ListBox.ItemSource = List,如果我還設置DisplayMemberPath和SelectedValuePath,它的工作正常。當我想要爲給定對象顯示的字符串實際上是一種方法或一組屬性時,我遇到了麻煩。

有人可以請指出我解決這個問題的正確方向嗎?

謝謝
桑尼

回答

1

有幾個選項我可以想到。

  1. 在列表框中
  2. 創建爲每個對象一個DataTemplate創建一個包裝類和您的列表框綁定到這些包裝類的列表。爲每個可能的搜索結果類創建一個構造函數(或其他方法)需要一點工作。
+0

#1做了詭計。我在後面的代碼中設置了不同的模板,如下所示:'this.lstSearchResults.ItemTemplate =(DataTemplate)this.FindResource(「clientListing」);'其中「clientListing」是我想要使用的模板的名稱。 :) – 2010-10-21 19:11:40

+0

如果你在你的datatemplate中設置了TargetType並刪除了鍵值,我認爲你甚至不需要設置itemtemplate ..它會自動找到它。 – mdm20 2010-10-21 19:33:58

+0

而不是在代碼隱藏中設置模板,爲什麼不創建DataTemplateSelector? – grimstoner 2012-06-21 14:00:35

0

好笑的是,我剛問了一個非常相似的question有關DataGrid

您可以做的是爲每種類型的搜索對象創建一個ListBoxItem對象的自定義集合,並在運行時將這些項目添加到ListBox

List<ListBoxItem> lbiTest = GetListBoxItems(); 
foreach (ListBoxItem lbi in lbiTest) 
{ 
    lbMyListBox.Items.Add(lbi); 
} 
+0

不會將項目添加到我的ListBox中手動打敗DataBinding的目的? – 2010-10-21 18:44:14

+0

這就是我的問題......它也違背了MVVM的指導原則,讓你的ViewModel意識到特定的UI控件......希望有人可以分享一些很好的見解...... – 2010-10-21 18:44:59