如何将DataTemplate应用于XElement子类?

时间:2009-04-19 12:41:49

标签: c# xml linq-to-xml datatemplate xelement

当我从XElement继承时,DataTemplate使用元素名称为XElement的{​​{1}}不适用于子类。有什么想法吗?

DataType

1 个答案:

答案 0 :(得分:0)

我知道为什么它不起作用,但我不明白为什么它按照它的方式实现。用反射器查看方法“FindTemplateResourceInternal”中的代码我找到了答案:

Type baseType = item.GetType();
if ((baseType.FullName == "System.Xml.Linq.XElement") && 
((obj2 = GetXLinqTagName(item, baseType)) != null))
{
    baseType = null;
}

好的,我知道我班的全名不是System.Xml.Linq.XElement。但是后来,一旦你进入“同时”:

while (obj2 != null)
{
    object obj3 = null;
    if (templateType == typeof(DataTemplate))
    {
        obj3 = new DataTemplateKey(obj2);
    }
    if (obj3 != null)
    {
        keys.Add(obj3);
    }
    if (exactMatch == -1)
    {
        exactMatch = keys.Count;
    }
    if (baseType != null)
    {
        baseType = baseType.BaseType;
        //HERE baseType FullName is XElement
        //Why don't check it again??
        if (baseType == typeof(object))
        {
            baseType = null;
        }
    }
    obj2 = baseType;
}

在此循环内,"baseType=baseType.BaseType"之后,如果再次检查FullName,现在它是XElement ... 但相反,它现在正在寻找DataTemplate DataType={x:Type XElement} ...