编辑:我对另一种方法持开放态度。 源数据是 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);
}
....
}