在ListView中显示和编辑各种项类型

时间:2013-04-05 21:21:14

标签: c# wpf listview mvvm

我在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}}中使用某种动态列,其中基础视图模型将确定哪些列(或属性

编辑也是如此 - ItemTypeA 只有一个ListView.View编辑区中只有 ItemTypeB 两个。

所以基本上,我的问题是,如何解决这个问题,同时尽量避免为每个项目类型创建完整的单独视图(使用ListView和编辑区域)。

另外,我想避免直接在ListView中编辑项目,因为项目值偶尔会包含大量文本(甚至多行文本),而且很难为用户编辑。

(我正在使用Caliburn.Micro,但这不应该与问题太相关。)

1 个答案:

答案 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样式: