2011-01-26 12 views
0

私はWPFアプリケーションで作業していますが、RadGridViewをXMLドキュメントにバインドする必要があります。 。WPF RadGridViewをXMLドキュメントにバインドし、属性値をグリッドに表示する必要があります。

現在は行の数を修正するために私を与えているが、代わりに、私は

それが文字列「System.Xml.XmlElement」を表示するために探していた値のここに私のXAMLです。

<telerik:RadGridView Name="uxSettings" ItemsSource="{Binding XmlSettings}" AutoGenerateColumns="False" 
RowIndicatorVisibility="Visible" Grid.Row="2" Grid.Column="1" Height="150" 
ShowGroupPanel="False" Width="350" Margin="10" IsFilteringAllowed="False"> 
<telerik:RadGridView.Columns> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding [email protected]}" Header="Item Name" Width="300"/> 
</telerik:RadGridView.Columns> 

そして、ここで私が結合していたXMLです。

私は実際にObservableCollectionコレクションにバインドしています。これは、このように設定されています。

public ObservableCollection<XmlNode> PopulateXmlSettings(XmlDocument settingsDoc) 

{にXmlDataProviderプロバイダ=新たにXmlDataProvider()。 provider.IsAsynchronous = false; provider.Document = settingsDoc; provider.XPath = "設定/設定";理想的には

return new ObservableCollection<XmlNode>((IEnumerable<XmlNode>)provider.Data); 

}

私はIDの "OutputXOffsetとOutputYOffsetは、" 表示できるようにしたいと値のみ "12" 編集可能に。

答えて

0

あなたが最初のウィンドウ定義で、ソリューションの名前空間を含め、その後

<telerik:RadGridView ....... ItemSource="{StaticResource Class1}" ....> 
<telerik:RadGridView.Columns> 
    <telerik:GridViewColumn DataMemberBinding="{Binding Path=ID}" .....> 
</telerik.RadView.Columns> 
0

代わりの結合を、以下のような制御を更新後

<Window.Resources> 
    <solutionNameSpace:ClassName x:Key="Class1" /> 
</Window.Resources> 
. 
. 

を、次のようなリソースでのObservableCollectionのコレクションクラスを含むで試すことができます直接XmlNodesに、自分のUIに必要な適切なプロパティを公開し、それらのコレクションにバインドする独自の型を作成します。

また、XmlNodeから継承し、ToString()をオーバーライドして列に表示する値を返すこともできますが、これはお勧めしません。私はPOCOを作成し、データソースからのデータとPOCOへのバインディングでデータを取り込むことをお勧めします。

傷あり;とにかくXmlNodeから継承することはできないようです。

0

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 [email protected]}"/> 
    <DataGridTextColumn Binding="{Binding [email protected]}"/> 
    </DataGrid.Columns> 
</DataGrid> 

<telerik:RadGridView Grid.Row="1" AutoGenerateColumns="False" 
    ItemsSource="{Binding Source={StaticResource XmlSettings}}"> 
    <telerik:RadGridView.Columns> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding [email protected]}"/> 
    <telerik:GridViewDataColumn DataMemberBinding="{Binding [email protected]}"/> 
    </telerik:RadGridView.Columns> 
</telerik:RadGridView> 

DataGridは機能しますが、RadGridViewは機能しません。代わりに、あなたが言ったようにxmlElementを返します。 xmlElementの値を取得するには、バインディング用の単純なConverter(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"/> 

と変更してください。

「ID」については、「値」にXPath文を残しておきました。これが役に立ったら...

関連する問題