2016-10-24 18 views
0

DataGridの各セルに特定の値を持つ特定の色を設定しようとしています。私はネット上で多くを見たが、私の状況に近づくものは見つけられなかった。 基本的に私はこのDataGrid構造をしました:DataGridの汎用セルプロパティのバインド

<DataGrid ItemsSource="{Binding MatchService.Matches}" AutoGenerateColumns="False" 
         CanUserAddRows="false" IsReadOnly="True"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="{DynamicResource championship}" Binding="{Binding Competition}"/> 
     <DataGridTextColumn Header="1" Binding="{Binding HomeWin}"/> 
     <DataGridTextColumn Header="X" Binding="{Binding Draw}"/> 
    </DataGrid.Columns> 

ので、私はすべてのセルの値を扱う一般的なスタイル、特に、純粋なXAMLのソリューションを使用する必要があります。たとえば、HomeWinセルの値が<50の場合、セルの値が>60の場合はセルの背景がredになり、背景が緑色になります。

デフォルトのスタイルを作成し、コンバータなどを書かずにDataGridTextColumnごとにバインドするにはどうすればよいですか?

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

+0

あなたは 'DataGridTextCoあなたが "equals"以外のトリガーでプロパティ値の比較をしたい場合は、コンバーターを書く必要があります。また、NumberToBrushコンバータを記述しないでください。数値比較コンバータを作成し、そのトリガを使用するDataTriggerにブラシを設定します。 –

+1

純粋なXAMLソリューションはありません。 Binding Converterを実装して使用する必要があります。これは4回目ですが、私はこの質問を重複して終了します。同じ質問を何度も何度もやめてください。 2番目のStackOverflowユーザーアカウントもここでは大歓迎ではありません。 – Clemens

+0

@Clemens、厳密に言えば、純粋なxamlソリューションがあります。それぞれの可能な値に対してcellStyle内のdataTriggerです。しかし、それは値の有限(そしてより小さい)セット(例えば、列挙型、ブール)にのみ適用されます。 – ASh

答えて

1

1.CreateこのようなNumberToBrushコンバータ:

[ValueConversion(typeof(int), typeof(Brush))] 
public class NumberToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int val = (int)value; 
     if (val < 50) 
      return Brushes.Red; 
     if (val > 60) 
      return Brushes.Green; 

     return Brushes.Transparent; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

2.Addそれあなたのビューリソースへ:代わりにDataGridTextColumnの

<Window.Resources> 
    <wpfApplication1:NumberToBrushConverter x:Key="NumberToBrushConverter"/> 
</Window.Resources> 

3.Use DataGridTemplateColumnと使用するようにするDataTemplateを再定義あなたのバインドされた値を持つコンバータ:

<DataGrid.Columns> 
      <DataGridTemplateColumn Header="X"> 
       <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate DataType="wpfApplication1:YourModel"> 
          <TextBox Text="{Binding X}" Background="{Binding Path=X, Converter={StaticResource NumberToBrushConverter}}" /> 
         </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
+0

答えをくれてありがとう、ちょうど好奇心のために:swithのようなケース条件を作成することが可能です:switch(val){case if(val <50){return Brushes.Red;}} ' – JDOE

+0

もちろん、あなたの条件がスイッチケース – Rom

+0

であれば私にどのように表示されますか?ありがとう。 – JDOE

関連する問題