Привязка 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)?