WPF 将 XML 元素转换为 DataGrid 内容



编辑:我对另一种方法持开放态度。 源数据是 XML,但肯定还有其他方法可以使数据网格正常运行。

这个答案让我开始了,但 DataGrid 中的情况似乎有所不同。 如果我省略值转换器,代码工作正常,但如果我放入值转换器,我收到的输入都是空字符串。

好但不完美:

    <DataGridTextColumn 
                Header="Length" 
                Binding="{Binding XPath=length/@value}}" />

垃圾:

    <DataGridTextColumn 
                Header="Length" 
                Binding="{Binding XPath=length, 
                          Converter={StaticResource valueFormattingConverter }}" />

有一个理论,上面给了我元素 ./length 的元素内容(它是一个空元素(,但我实际上想要元素 ./length,因为属性需要处理。

不错,但对于组合盒:

<ComboBox Style="{StaticResource ComboButtonStyle}" Width="200" 
        Text="{Binding Path=., Converter={StaticResource valueFormattingConverter }}"
          IsEditable="True" />

因此,在组合示例中,valueFormattingConverter.Convert使用XmlElement(耶!(调用。 在 DataGridTextColumn 示例中,它使用空字符串进行调用。

编辑:正在进行的研究指出IMultiValueConverter是我可能想要的东西。

这有效,但很乏味。 我需要在每一列中重新制作DataGridTextColumn.Binding之间的所有内容,每次XPath时都会更改。

如果有人能想出更好的方法,奖品是开放的。

  <W3V:UnitsConverter x:Key="unitsConverter" />

    <DataGridTextColumn Header="Length">
      <DataGridTextColumn.Binding>
        <MultiBinding Converter="{StaticResource unitsConverter}">
          <Binding XPath="length/@value"/>
          <Binding XPath="length/@type"/>
          <Binding XPath="length/@units"/>
        </MultiBinding>
      </DataGridTextColumn.Binding>
    </DataGridTextColumn>

[ValueConversion(typeof(XmlElement), typeof(string))]
public class UnitsConverter : IMultiValueConverter
{
object IMultiValueConverter.Convert(object[] value, Type targetType, 
                   object parameter, System.Globalization.CultureInfo culture)
{
  if (value == null) return new List<string>();
  string data = value[0] as string;
  string type = value[1] as string;
  string unit = value[2] as string;
  return Information.FormatValue(data, type, unit);
}
....
}

最新更新