1
各種項目類型,我展示兩種類型的項目中的ListView:顯示和編輯ListView中
abstract class Item
{
string ID { get; }
}
class ItemTypeA : Item
{
string Value { get; set; }
}
class ItemTypeB : Item
{
string ValueOne { get; set; }
string ValueTwo { get; set; }
}
(當然,還有更多給他們一點,他們使用不同的接口,但對於例如起見,我把它留了下來,只顯示了這些類型的「最終」結構)
所以基本上在ListView中,總是有一個ID列,其他列依賴於項目類型。
我想使用某種動態列在ListView.View
,其中底層視圖模型將確定GridView
,這列(或屬性給定項目類型的)應該被顯示。
也是一樣的編輯 - 應該只有一個TextBox
爲ItemTypeA和兩個用於ItemTypeB在編輯區。
所以基本上,我的問題是,如何解決這個問題,同時試圖避免爲每個項目類型製作完整的單獨視圖(帶有ListView和編輯區域)。
此外,我想避免直接在ListView中編輯項目,因爲項目值可能偶爾包含大量文本(甚至是多行文本),並且很難爲用戶編輯。
(我使用Caliburn.Micro,但這不應該與問題太相關)。
你可以設置第二列的[ CellTemplateSelector(http://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewcolumn.cell templateselector.aspx)添加到適當的[DataTemplateSelector](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datatemplateselector.aspx)。同樣,您可以爲編輯區域使用ContentPresenter和適當設置的[ContentTemplateSelector](http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter.contenttemplateselector.aspx)。 – Clemens 2013-04-05 21:38:36
但我不想在ListView中顯示'ItemTypeB'作爲ValueOne和ValueTwo的複合值。當ItemTypeB項顯示在ListView中時,我需要兩個額外的列(ValueOne和ValueTwo),而只顯示一個額外的列(Value)。 – mnn 2013-04-05 22:02:51
只是方向......我認爲你的虛擬機應該包含原始列表中的最大列數的屬性,並且列表屬性爲每個原始項目返回ienumerable,具有相應數量的屬性 – shibormot 2013-04-05 22:59:54