【问题标题】:WPF Converting XML elements to DataGrid contentWPF 将 XML 元素转换为 DataGrid 内容
【发布时间】:2015-04-28 03:09:45
【问题描述】:

编辑:我对另一种方法持开放态度。源数据是 XML,但肯定有其他方法可以让数据网格发挥作用。

This answer got me started,但 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" />

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

编辑:正在进行的研究表明 IMultiValueConverter 是我可能想要的。

【问题讨论】:

    标签: c# xml wpf datagrid valueconverter


    【解决方案1】:

    这可行,但很乏味。我需要重新制作每一列中 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);
    
    }
    ....
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多