Как создать шаблон данных в зависимости от атрибута XML? - PullRequest
2 голосов
/ 19 августа 2009

Я работаю над интерфейсом WPF, который читает файл XML и отображает данные. Файл XML будет выглядеть примерно так:

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

Мне нужен шаблон данных, зависящий от атрибута Пол человека. Этот шаблон данных предназначен для элементов списка. Источник списка - Люди.

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

Я думал, что это будет что-то вроде приведенной выше строки кода, но это не работает. Есть идеи?

Спасибо!

1012 * ОТВЕТ *
Вот DataTemplateSelector для приведенного выше примера XML:

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;
    }
}

Спасибо за помощь! Надеюсь, это будет полезно и кому-то еще!

1 Ответ

1 голос
/ 19 августа 2009

Вам необходимо использовать DataTemplateSelector . Эта статья доктора WPF демонстрирует это полностью и является именно тем, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...