報告したい 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 ステートメントをそのままにして、「値」の場合は省略したことに注意してください。違いはありません。お役に立てれば...