我需要将Linq to XML绑定到Silverlight Datagrid

时间:2010-10-28 16:33:37

标签: silverlight data-binding datagrid linq-to-xml

我正在查看this问题,它给了我大约80%的所需内容。对我来说,“问题”是我的XML格式不同,我不太确定如何使用Linq来获取我需要的东西。

我的XML看起来像这样(顺便说一下,它是由ConvertTo-XMl PowerShell Cmdlet生成的)

<?xml version="1.0"?>
<Objects>
  <Object>
    <Property Name="Name">CompiledCode.ps1</Property>
    <Property Name="LastWriteTime">5/21/2009 6:59:16 PM</Property>
  </Object>
  <Object>
    <Property Name="Name">ComputerDrawing.ps1</Property>
    <Property Name="LastWriteTime">1/13/2010 7:52:44 AM</Property>
  </Object>
</Objects>

我正在尝试绑定到Silverlight DataGrid,以便列名称为“Name”和“LastWriteTime”,并且行将具有属性标记中的值。对于第一个,名称将是Compiled Code.ps1,LastWriteTime将是“5/21/2009 6:59:16 PM”

上述问题的答案有这个方法

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;
        }

我创建了自己的名为Scripts的类,它有一个Name和一个Date,但我想弄清楚填充数据网格需要哪些元素或属性。

1 个答案:

答案 0 :(得分:1)

这是你需要的基本要点: -

private Scripts GetScripts(XElement el)
{
    Scripts s = new Scripts()

    s.Name = (string)el.Elements("Property")
        .Where(e => (string)e.Attribute("Name") == "Name")
        .FirstOrDefault();

    string lastWriteTime = (string)el.Elements("Property")
        .Where(e => (string)e.Attribute("Name") == "LastWriteTime")
        .FirstOrDefault();

    s.LastWriteTime = DateTime.ParseExact(lastWriteTime, "M/d/yyyy h:m:s tt", CultureInfo.InvariantCulture);
 }

您可能希望LastWriteTime成为DateTime,因此您可能希望将其置于中间字符串中并使用精确解析。