2017-02-21 2 views
0

私は、それぞれ「エラー、フォワード、リバース」としてテキストを表示する必要がある整数値(0,1,2)を持っています。WPFグリッドの条件に基づいてテキストの値を設定します

GridViewDataColumnのsetterプロパティを使用してform.xamlでこれを実現できますか。もしそうでなければ、どのような値になりますか。 データ列の場合、バインドをDataMemberBinding="{Binding Direction}"と定義する必要があります。ここで、 'Direction'はUInt16であり、このDirectionプロパティはObservableコレクションの一部です。したがって、変更ごとにデータを文字列として表示する必要があります。

<telerik:GridViewDataColumn DataMemberBinding="{Binding Direction}" UniqueName= "Direction" Header="Direction" Width="85" TextAlignment="Left" HeaderTextAlignment="Center" DisplayIndex="9" IsFilteringDeferred="True" > 

がどのように私はそれを達成するためにトリガーを追加することができますように私は単純に、列が私のグリッドで定義されていますか?

+0

これは複数の方法で実現できます。コンバーター、トリガー、またはViewModel内の追加のプロパティ。あなたがコードを投稿して以来、最高の解決策を提案するのは難しい – lokusking

+0

@lokuskingはあなたのコメントごとに私の質問を編集しました。私はこのようなことについて何もコード化していない。これを行うには、どのようにトリガーを使用できますか? –

答えて

0

あなたはユーザーDataTrigger/IValueConvertorを達成することができます

DataTrigger:

<Style.Triggers> 
     <!-- 1st trigger --> 
     <DataTrigger Binding="{Binding Path=Direction}" Value="0"> 
     <Setter Property="Text" Value="Error"/> 
     </DataTrigger> 
     <!-- 2nd trigger --> 
     <DataTrigger Binding="{Binding Path=Direction}" Value="1"> 
     <Setter Property="Text" Value="Forward"/> 
     </DataTrigger> 
     <!-- 3rd trigger --> 

    <DataTrigger Binding="{Binding Path=Direction}" Value="2"> 
    <Setter Property="Text" Value="Reverse"/> 
    </DataTrigger> 

</Style.Triggers> 

コンバータ:

<telerik:GridViewDataColumn DataMemberBinding="{Binding Direction,Convertor={StaticResource InttoDateConverter }" UniqueName= "Direction" Header="Direction" Width="85" TextAlignment="Left" HeaderTextAlignment="Center" DisplayIndex="9" IsFilteringDeferred="True" > 


public class InttoDateConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, 
       System.Globalization.CultureInfo culture) 
     { 
      switch (value.ToString().ToLower()) 
      { 
       case "0": 
        return "Error!"; 
       case "1": 
        return "Forward"; 

       default: 
        return "Reverse"; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, 
       System.Globalization.CultureInfo culture) 
     { 
      // only for two way binding 
     } 
    } 

DataGrid列バインディング:

<telerik:GridViewDataColumn Header="Direction" > 
     <telerik:GridViewDataColumn.CellTemplate> 
      <DataTemplate> 
         <TextBlock Text="{Binding Direction, Converter={StaticResource IntoToDataConvertor}, Mode=Default}" /> 
      </DataTemplate> 
     </telerik:GridViewDataColumn.CellTemplate> 
</telerik:GridViewDataColumn> 
+0

しようとしましたコンバータ使用してコード 'のxmlns以下:カスタム= "CLR名前空間:MyFormを、アセンブリ=">' ' <カスタム:InttoDateConverter X:キー= "convertDirection"> Direkt "Headlines =" Direction "Width =" 85 "TextAlignment =" Left "HeaderTextAlignment = "Center" DisplayIndex = "9" IsFilteringDeferred = "True" /> ' メソッドが呼び出されていますが、テキストが期待どおりに変更されません。私は何が欠けているのですか? –

+0

最後の解決策DataGridColumnは直接コンバーターをサポートしません。 celltemplateを定義してから試してください – Ragavan

+0

ありがとうございました。 –

関連する問題