我有一個ListBox,我正在使用它來顯示各種搜索的結果。這些搜索可能會發生在許多不同類型的對象上,並且在所有情況下都會遇到一些麻煩。WPF - 如何重用列表框來顯示不同的對象列表?
大部分時間我可以只設置ListBox.ItemSource = List,如果我還設置DisplayMemberPath和SelectedValuePath,它的工作正常。當我想要爲給定對象顯示的字符串實際上是一種方法或一組屬性時,我遇到了麻煩。
有人可以請指出我解決這個問題的正確方向嗎?
謝謝
桑尼
我有一個ListBox,我正在使用它來顯示各種搜索的結果。這些搜索可能會發生在許多不同類型的對象上,並且在所有情況下都會遇到一些麻煩。WPF - 如何重用列表框來顯示不同的對象列表?
大部分時間我可以只設置ListBox.ItemSource = List,如果我還設置DisplayMemberPath和SelectedValuePath,它的工作正常。當我想要爲給定對象顯示的字符串實際上是一種方法或一組屬性時,我遇到了麻煩。
有人可以請指出我解決這個問題的正確方向嗎?
謝謝
桑尼
有幾個選項我可以想到。
好笑的是,我剛問了一個非常相似的question有關DataGrid
。
您可以做的是爲每種類型的搜索對象創建一個ListBoxItem
對象的自定義集合,並在運行時將這些項目添加到ListBox
。
List<ListBoxItem> lbiTest = GetListBoxItems();
foreach (ListBoxItem lbi in lbiTest)
{
lbMyListBox.Items.Add(lbi);
}
不會將項目添加到我的ListBox中手動打敗DataBinding的目的? – 2010-10-21 18:44:14
這就是我的問題......它也違背了MVVM的指導原則,讓你的ViewModel意識到特定的UI控件......希望有人可以分享一些很好的見解...... – 2010-10-21 18:44:59
#1做了詭計。我在後面的代碼中設置了不同的模板,如下所示:'this.lstSearchResults.ItemTemplate =(DataTemplate)this.FindResource(「clientListing」);'其中「clientListing」是我想要使用的模板的名稱。 :) – 2010-10-21 19:11:40
如果你在你的datatemplate中設置了TargetType並刪除了鍵值,我認爲你甚至不需要設置itemtemplate ..它會自動找到它。 – mdm20 2010-10-21 19:33:58
而不是在代碼隱藏中設置模板,爲什麼不創建DataTemplateSelector? – grimstoner 2012-06-21 14:00:35