我在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列,其他列取决于项目类型。
我正考虑在GridView
的{{1}}中使用某种动态列,其中基础视图模型将确定哪些列(或属性应显示给定项目类型的em>。
编辑也是如此 - ItemTypeA 只有一个ListView.View
,编辑区中只有 ItemTypeB 两个。
所以基本上,我的问题是,如何解决这个问题,同时尽量避免为每个项目类型创建完整的单独视图(使用ListView和编辑区域)。
另外,我想避免直接在ListView中编辑项目,因为项目值偶尔会包含大量文本(甚至多行文本),而且很难为用户编辑。
(我正在使用Caliburn.Micro,但这不应该与问题太相关。)
答案 0 :(得分:0)
您可以为ListViewItem提供自己的DataTemplateSelector:
public class MyTemplateSelector : DataTempolateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// here select temaplate, from dictionary for example, using item.GetType()
}
}
您的项目视图模型类:
abstract class Item
{
string ID { get; }
MyTemplateSelector TemplateSelector { get; }
}
您的ListViewItem样式: