看起来像是 Telerik 控件中的一个错误,您可能想要报告。为了测试这一点,我写了你的 xml,比如;
<XmlDataProvider x:Key="XmlSettings" XPath="/settings/setting">
<x:XData>
<settings xmlns="">
<setting ID="OutputXOffset" value="12"/>
<setting ID="OutputYOffset" value="12"/>
</settings>
</x:XData>
</XmlDataProvider>
然后用 DataGrid 和 Telerik RadGridView 绑定到它;
<DataGrid Grid.Row="0" AutoGenerateColumns="False"
ItemsSource="{Binding Source={StaticResource XmlSettings}}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=@ID}"/>
<DataGridTextColumn Binding="{Binding XPath=@value}"/>
</DataGrid.Columns>
</DataGrid>
<telerik:RadGridView Grid.Row="1" AutoGenerateColumns="False"
ItemsSource="{Binding Source={StaticResource XmlSettings}}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding XPath=@ID}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding XPath=@value}"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
并且 DataGrid 可以工作,但 RadGridView 没有,而是如您所说返回一个 xmlElement 。为了获得 xmlElement 的值,我想我会为绑定编写一个简单的转换器 (IValueConverter)。一旦我这样做了,我发现转换器接收整个“设置”元素而不是 XPath 指向的属性,所以转换器看起来像;
Imports System.Xml
<ValueConversion(GetType(XmlElement), GetType(String))> _
Public Class xmlElement2String
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type,
parameter As Object, culture As System.Globalization.CultureInfo
) As Object Implements System.Windows.Data.IValueConverter.Convert
Dim anXmlElement As XmlElement = TryCast(value, XmlElement)
If anXmlElement is Nothing then Return Binding.DoNothing
Return anXmlElement.SelectSingleNode(CType(parameter,String)).Value
End Function
Public Function ConvertBack(value As Object, targetType As Type,
parameter As Object, culture As System.Globalization.CultureInfo
) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
throw new System.NotImplementedException("Not implemented.")
End Function
End Class
因此,您可以在 Xaml 中添加对值转换器的引用,例如;
<local:xmlElement2String x:Key="xmlElement2String"/>
并将您的绑定更改为;
<telerik:GridViewDataColumn DataMemberBinding="{Binding XPath=@ID,
Converter={StaticResource xmlElement2String}, ConverterParameter=@ID}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding
Converter={StaticResource xmlElement2String}, ConverterParameter=@value}"/>
请注意,对于“ID”,我将 XPath 语句保留在其中,对于“value”,我将其关闭,这没有任何区别。希望这可以帮助...