根据具体类的泛型类型选择DataTemplate for DataGrid

时间:2017-02-17 14:42:26

标签: c# wpf wpfdatagrid

基于具有一个类似T的类似

的类
public abstract class BaseClass<T> {
    pulic string Name;
    public T Value { get; set; }
    // ...
}

以及一些实现此基类的具体类

public class IntClass<int> : BaseClass<int> {
    // ...
}

public class StringClass<string> : BaseClass<string> {
    // ...
}

我创建了一个WPF DataGrid,其中包含两个列,显示第一列中的Name属性和第二列中的Value属性。 Name属性是只读的,但显示Value属性的单元格是可编辑的。为此,我为单元格中DataTemplate属性的显示和编辑创建了不同的Value。由于我想在一个IntClass中显示各种不同的子类(例如StringClassDataGrid,...),因此每个子类都有适当的DataTemplate是通过DataTemplateSelector选择的,用于识别类似

的类
aClassObject.GetType() == typeof(IntClass)
// ...

并选择/返回我存储在另一个DataTemplate中的ResourceDictionary

这种方法很好,但是,我正在寻找一个更通用的解决方案,它选择DataTemplate来显示和编辑一个单元格,只在具体类的泛型类型T上。我该怎么做呢?我想放弃DataTemplateSelector。这不是通过为所有可用的泛型类型提供不同的DataTemplate并且仅基于抽象基类属性来工作,例如“我知道子类继承了一个名为Value的属性并且基于具体的泛型子类的类型我正在显示标签,文本框,日期选择器......而不知道子类实际上是什么“?

注意:在上面提供的示例中,类型可能会变得更复杂,但是,总是结构化(加上,我知道字符串实际上不是结构)。

0 个答案:

没有答案