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示例,使用XmlElement调用valueFormattingConverter.Convert(yay!)。使用DataGridTextColumn示例,使用空字符串调用它。
编辑:正在进行的研究指出IMultiValueConverter是我可能想要的东西。
答案 0 :(得分:0)
这很有效,但很乏味。我需要在每列中的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);
}
....
}