Как правильно привязать xml к WPF DataGrid?
Я искал и пробовал различные решения, но до сих пор никто из них не решает мою проблему. Я использую встроенный DataGrid из WPF в Visual Studio 2010 / .NET4 для отображения данных из XML-документа, хранящегося в XDocument.
Мой код работает нормально, и я подтвердил, что XDocument присутствует и корректен. Однако DataGrid не отображает никаких данных.
XML выглядит так (упрощен для ясности):
- Привязать к методу в WPF?
- Связывание WPF ComboBox с пользовательским списком
- Похоже, что привязки данных не обновляются
- Есть ли способ определить, где объявляется / создается привязка WPF?
- WPF привязка данных к интерфейсу, а не к фактическому объекту - возможность литья?
...
Мой XAML выглядит так:
C #, который поддерживает его, просто назначает новый XDocument (загруженный из веб-службы) в свойство TrackList (которое реализует INotifyPropertyChanged). Дальнейшая обработка на нем не производится.
Я ранее пытался использовать XLinq для привязки к результату запроса, который тоже не работал (такая же проблема), поэтому я подумал, что попробую подход XPath, чтобы избежать написания потенциально глючного оператора Linq и попытаться найти проблему ,
У меня заканчиваются идеи о том, как правильно отображать DataGrid. Мое понимание того, как это должно работать, явно отсутствует, поэтому я бы очень признателен за любую помощь.
Изменить: Стоит отметить, что у меня есть определенная гибкость в формате входных данных, поскольку я загружаю необработанный XML. Я попробую некоторые из предложений и посмотрю, что я могу приступить к работе.
- Привязка OneWayToSource от свойства readonly в XAML
- Что означает «{Binding Path =.}» В привязке WPF?
- Как я могу привязать данные строк к ListBox в WPF / WP7?
- Перетаскивание из источника данных в окно WPF не работает
- Связывающие свойства в коде
- ElementName привязка из MenuItem в ContextMenu
- Общий class наблюдаемого словаря для DataBinding / WPF C #
- Нажатие свойств GUI только для чтения обратно в ViewModel
Я использовал XLinq и отлично работал, используя XElement вместо XDocument:
XElement TrackList = XElement.Load("List.xml"); LibraryView.DataContext = TrackList;
Xaml:
Связывание XPath имеет смысл только в том случае, если вы привязываетесь к чему-то, что является XmlNode (например, вы используете XmlDataProvider). См. Здесь .
XPath не работает с classами XDocument. Единственный способ привязки к свойствам XDocument – это обычный синтаксис пути, который не поддерживается XML.
Лучше всего использовать XmlDataSource или преобразовать свой Xml-документ через XDocument в POCO. Это довольно просто, используя LINQ:
XDocument doc = XDocument.Load(xmlFile); var tracks = from track in doc.Descendants("data") select new Track() { Name= track.Element("name").Value, Duration= track.Element("duration").Value, etc ... }; LibraryView.ItemsSource = tracks;