2012-01-10 25 views
3

私のDataGrid(ProductとPriceなど)の内容はXMLファイルからロードされ、DataGridでソートされるとすべてのものがテキストとして扱われます。WPF DataGridのXMLファイルからテキストを数値としてソートするには?

並べ替え時にPriceをNumberとして扱うようにDataGridに指示する方法を教えてください。ありがとう。

ここに関連するXAMLがあります(コードはありません)。これは単なる推測で、コードなしで

<DataGridTemplateColumn Header="Length" SortMemberPath="Length" Width="100"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock TextAlignment="Right" VerticalAlignment="Center" Text="{Binding XPath=Length}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
+2

はいつも言葉だけよりも優れている、それを使用。 –

答えて

4

バインディングにコンバーターを追加できます。 ステップ1:コンバータクラスを作成します。

[ValueConversion(typeof(string), typeof(int))] 
public class StringToIntConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return Int32.Parse(value.ToString()); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.ToString(); 
    } 
} 

少し検証が賢明かもしれませんが、これは唯一の初歩的な例です。

ステップ2:コンバータをインスタンス化します。ネームスペース宣言をXamlに追加してください。

<Window.Resources> 
    <StringToIntConverter x:Name="stringToInt"/> 
</Window.Resources> 

ステップ3:あなたのコードを表示

<DataGridTemplateColumn Header="Length" SortMemberPath="Length" Width="100"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock TextAlignment="Right" VerticalAlignment="Center" Text="{Binding XPath=Length, Converter={StaticResource stringToInt}}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
1

が、私は、リストに入れていること、あなたがオブジェクトにXML直列化復元を行っていると仮定していると、あなたのデータグリッドがある:私は数として長さをソートしたいですリストにバインドされています。リストクラスの価格データフィールドをintにすると、DataGridはそれを数値として扱います。

+0

いいえ、コードの背後にはシリアル化の種類はありません。質問に追加されたすべてのことが、XAMLファイルの宣言にすぎません。 – user763554

+0

これは良い質問です。あなたは良い答えを得ています:) –

関連する問題