Nano Hash - криптовалюты, майнинг, программирование

Как привязать XML к DataGrid в Silverlight

У меня есть приложение, которое получает XML с сервера. Я хочу привязать данные к сетке данных, и было бы здорово, если бы сетка автоматически генерировала столбцы. До сих пор я пытался сделать это в своем коде.

Страница XAML:

<data:DataGrid x:Name="Status" ItemsSource="{Binding}" AutoGenerateColumns="True">
</data:DataGrid>

Код позади страницы:

void Status_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    XElement recordSet = XElement.Load(e.Result);
    CamerasStatusTabDataGrid.ItemsSource = recordSet.Elements("Status");
}

XML с сервера:

<StatusReport>
    <Status Description="Spilled Coffe on Server" Date="2/5/2009" />
    <Status Description="Mice in Copier" Date="4/3/2008" />
    <Status Description="Helped User Find Any Key" Date="6/2/2008" />
</StatusReport>

Я хочу, чтобы статус был строкой в ​​сетке с столбцами «Описание» и «Дата».


  • Я обновил свой исходный пост. На моей машине это сработало. :-) 10.03.2009
  • Код работает на вас. У меня это не работает. 25.09.2014

Ответы:


1

Хороший способ сделать это - использовать Linq to Xml, ниже приведен полный пример:

Page.xaml:

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    Width="400" Height="300"
    Loaded="Page_Loaded">

    <Grid x:Name="LayoutRoot" Background="White">
        <data:DataGrid x:Name="DataGrid1" />
    </Grid>
</UserControl>

Page.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Xml.Linq;

namespace SilverlightApplication1
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            DataGrid1.ItemsSource = GetStatusReport();
        }

        public List<Status> GetStatusReport()
        {
            List<Status> statusReport = new List<Status>();

            // Get your Xml using XElement.Load(e.Result);
            XElement doc = XElement.Load(@"Data/StatusReport.xml");

            statusReport = (from el in doc.Elements()
                            select GetStatus(el)).ToList();

            return statusReport;
        }

        private Status GetStatus(XElement el)
        {
            Status s = new Status();
            s.Description = el.Attribute("Description").Value;
            s.Date = DateTime.Parse(el.Attribute("Date").Value);
            return s;
        }
    }
}

Убедитесь, что вы добавили ссылку на сборку System.Xml.Linq. Это дает результат, который вы искали, со статусом для каждой строки в сетке с столбцами «Описание» и «Дата».

http://www.freeimagehosting.net/uploads/aa3f9978fc.png

09.03.2009

2

Обратите внимание на следующие ссылка.

Он содержит работающий код (в моей среде), который создает класс со свойствами во время выполнения. Класс используется для заполнения универсального IList ‹object›, который может служить источником для сетки данных.

Мне было неудобно размещать здесь код, потому что 99,99999% его не мои.

По ссылкам вы перейдете к исходному сообщению, где вы найдете рабочий код Silverlight в виде комментария, опубликованного мной.

Некоторое время назад я опубликовал другой подход с использованием преобразователя значений: Динамически привязать XML в DataGrid в Silverlight

09.03.2009
  • Это хороший учебник. Однако я ищу способ динамической привязки данных, поскольку я могу не знать имена всех столбцов. 10.03.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..