2016-06-07 5 views
0

Я пытаюсь перевязать XElement в первый раз, так что извиняюсь, если это очень глупо. У меня есть XML, который мне нужно связать с DataGrid.Связывание XElement с Datagrid

Music.xml:

<Music> 
    <Album Title="Chris Sells Live" Artist="Chris Sells" ReleaseDate="2/5/2008" /> 
    <Album Title="The Road to Redmond" Artist="Luka Abrus" ReleaseDate="4/3/2008"/> 
    <Album Title="The Best of Jim Hance" Artist="Jim Hance" ReleaseDate="6/2/2008"/> 
</Music> 

CodeBehind:

InitializeComponent(); 
XElement MyMusic = XElement.Load("Music.xml"); 
this.XElementContainer.DataContext = MyMusic.Elements("Album"); 

Приведенный выше код получает XElement из Music.Xml файла

XAML: <DataGrid x:Name="XElementContainer" ItemsSource="{Binding}"/>

выход, который я получение [! [Это связывает свойства XElement. Мне нужно, чтобы связать дочерний элемент указанного узла, т.е. альбом, который имеет дочерние узлы название, исполнитель и дата выпуска]

enter image description here

Я ожидаю, что выход в сетке, где я не хочу, чтобы создать статическое DataGridTextColumn , Можно ли просто связать данные XElement и получить результат, как это ?:

Title     |Artist  |ReleaseDate 
    Chris Sells Live  Chris Sells 2/5/2008 
    The Road to Redmond Luka Abrus 4/3/2008 
    The Best of Jim Hance Jim Hance  6/2/2008 

ответ

1

DataGrid не может AutoGenerate столбцов при связывании данных XML напрямую, это один из (меньших) причин, почему вы обычно хотите использовать ViewModel.

Фактически он работает с автогенерирующими столбцами из свойств класса объекта, с которым вы его связываете. Вот почему вы видите свойства XElement в тех автогенерированных столбцах.

Если вы хотите связать с XML вы должны объявить столбцы:

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[Title].Value}" Header="Title" /> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[Artist].Value}" Header="Artist"/> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[ReleaseDate].Value}" Header="ReleaseDate"/> 
</DataGrid.Columns> 
+0

Спасибо Natxo. Но почему привязка свойств XElement к сетке? –

+0

@ ParthasarthiB.K Я сделал редактировать, чтобы уточнить это – Natxo

+0

Прекрасно работает Natxo. Но есть ли альтернативное решение для моей проблемы? Я не хочу иметь статический DataGridTextColumn. Не могу ли я просто привязать XElement к DataGrid так же, как и к списку DataGrid Binding? Любая помощь могла бы быть полезна. –

Смежные вопросы