Привязка ItemsSource к строке XML

У меня есть вызов хранимой процедуры базы данных, который, среди других столбцов, возвращает столбец, который содержит данные в формате XML. Я пытаюсь отобразить результаты этого вызова в сетке (вызов выполняется через Entity Framework, поэтому фактические объекты, связанные с сеткой, являются POCO, а рассматриваемый столбец - это string имущество).

В то время как нормальные столбцы отображаются правильно, мне нужно иметь возможность взять данные XML в этом одном столбце и связать его содержимое (оно будет содержать несколько узлов) с ItemsControl в шаблоне для ячейки.

Например, скажем, у меня есть сетка, которая отображает коллекцию следующего объекта:

class Photo
{
    string PhotoId { get; set; }
    string Name { get; set; }
    string TagListXml { get; set; }
}

Это предназначено для представления фотографии, а TagListXml Свойство содержит строку XML, в которой перечислены все теги, которые были применены к фотографии. Что-то похожее на...

<PhotoTags>
    <Tag>Faces</Tag>
    <Tag>People</Tag>
    <Tag>Sepia</Tag>
</PhotoTags>

(Хотя, очевидно, нормальный POCO будет иметь List<string> или что-то в этом роде, давайте пока предположим, что я должен использовать строку XML)

В моей сетке я хочу иметь возможность указать ItemsControl который использует этот XML и, в конечном итоге, дает мне элементы Faces, People, а также Sepia,

Я пробовал это для шаблона ячейки:

<DataTemplate>
    <ItemsControl ItemsSource="{Binding TagListXml, 
                                Converter={StaticResource xmlConverter}}" />
</DataTemplate>

куда xmlConverter определяется как таковой:

<dc:StringToXmlConverter x:Key="xmlConverter" XPath="PhotoTags" />

А также dc:StringToXmlConverter это обычай IValueConverter который просто принимает строковое значение, создает экземпляр XmlDocument и загружает строку, а затем возвращает XmlDataProvider с этим новым документом и XPath указано выше.

Хотя это не приводит к ошибкам в форме исключения или ошибки привязки в окне "Вывод", оно ничего не делает (результаты не отображаются).

Я считаю, что это потому, что XmlDataProvider не может быть установлен на ItemsSource непосредственно, но скорее должно быть установлено как Source из Binding, (другими словами, вы должны сделать ItemSource="{Binding Source={StaticResource xmlProvider}}" скорее, чем ItemsSource="{StaticResource xmlProvider}").

Кажется, я ничего не могу с этим поделать, и последние несколько часов я бился головой об этом.

Как я могу связать строку XML с ItemsSource из ItemsControl ?

1 ответ

Решение

Почему бы не вернуть XmlNode[] вместо XmlDataProvider (в любом случае, в основном для XAML)?

Другие вопросы по тегам