【问题标题】:How to create a data template dependent on an XML Attribute?如何创建依赖于 XML 属性的数据模板?
【发布时间】:2010-11-21 00:51:57
【问题描述】:

我正在开发一个读取 XML 文件并显示数据的 WPF 接口。 XML 文件应该是这样的:

<People>
    <Person Gender="Male">
        <Name>Joe</Name>
    </Person>
    <Person Gender="Female">
        <Name>Susan</Name>
    </Person>
</People>

我需要一个依赖于 Person 的 Gender 属性的数据模板。此数据模板适用于列表框项目。列表框的来源是 People。

<DataTemplate DataType="Person[@Gender='Male']">
</DataTemplate>
<DataTemplate DataType="Person[@Gender='Female']">
</DataTemplate>

我认为它会类似于上面的代码行,但它不起作用。有什么想法吗?

谢谢!

回答
这是上述 XML 示例的 DataTemplateSelector:

public class MyDataTemplateSelector : DataTemplateSelector
{
    private DataTemplate _MaleTemplate = null;
    private DataTemplate _FemaleTemplate = null;

    public DataTemplate MaleTemplate
    {
        get { return _MaleTemplate; }
        set { _MaleTemplate = value; }
    }
    public DataTemplate FemaleTemplate
    {
        get { return _FemaleTemplate; }
        set { _FemaleTemplate = value; }
    }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        XmlElement currentNode = (XmlElement)item;
        DataTemplate selectedTemplate = null;
        string selectedGender = "";

        selectedGender = currentNode.GetAttribute("Gender");

        switch (selectedGender)
        {
            case "Male":
                selectedTemplate = _MaleTemplate;
                break;

            case "Female":
                selectedTemplate = _FemaleTemplate;
                break;

            default:
                break;
        }

        return selectedTemplate;
    }
}

感谢您的帮助!我希望这对其他人也有用!

【问题讨论】:

    标签: wpf xml data-binding xaml binding


    【解决方案1】:

    您需要使用 DataTemplateSelector。 WPF 博士的 article 完全展示了这一点,正是您正在寻找的。​​p>

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多