2015-07-28 6 views
2

Я использую триггеры данных, чтобы изменить цвет строк в компоненте представления DataGrid. код:Изменение цвета строки строки WPF DataGrid на основе переменной

class QuantityToColorConverter : IValueConverter 
{ 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return (int)value <= 444 ? 
       new SolidColorBrush(Colors.Red) 
       : new SolidColorBrush(Colors.White); 
     } 
     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new Exception("The method or operation is not implemented."); 
     } 
} 

Как я могу заменить «444» значение по переменной, которая имеет результат некоторого вычисления значений ячейки сетки в функции button_click?

EDIT: чтобы сделать его более ясным, что мне нужно: я хочу изменить цвет строк, которые имеют значение в одном из столбцов больше среднего. Поскольку среднее вычисляется на основе данных DataGrid, мне нужно отправить его как переменную вместо константы 444.

EDIT2: Код кнопки:

private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     var engine = new FileHelperEngine<ActionLog>(); 

     var result = engine.ReadFile("browse.csv"); 
     // result is now an array of ActionLog 

     var actionsCnt = new int[22]; 

     int curAccessId = result[1].AccessId; 
     int AccessCount = 0; 

     foreach (var record in result) 
     { 
      actionsCnt[record.ActionType]++; 
      if (record.AccessId != curAccessId) { curAccessId = record.AccessId; AccessCount++; } 
     } 

     quantityThreshold = AccessCount; 

     List<act> myList = new List<act>(); 
     for (int i = 0; i < 22; i++) 
      myList.Add(new act() { actionID = i, quantity = actionsCnt[i] }); 

     grid1.ItemsSource = myList; 

     engine.WriteFile("FileOut.csv", result); 
    } 

quantityThreshold переменная Я хочу использовать вместо '444'

+0

преобразователи также имеют параметр ... это аргумент параметра объекта –

ответ

1

попробовать это

<DataGrid> 
    <DataGrid.CellStyle> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SomeProperty}" Value="SomeValue" > 
        <Setter Property="Foreground" Value="Blue" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.CellStyle> 
</DataGrid> 

refer this link

+0

Это то, что находится на части XAML. Но мне нужно изменить цвет, сравнивая его с переменной, а не постоянным числом на стороне C#. –

2

Привязать эту вычисленную переменную к вашему конвертеру ConverterParameter. Смотрите эту тему на Binding to Converter Parameter

return (int)value <= (int)parameter? 
       new SolidColorBrush(Colors.Red) 
       : new SolidColorBrush(Colors.White); 
+0

спасибо! но я до сих пор не понимаю, как отправить параметр '(int)' из моей функции button_click –

0

Вы можете передать параметр в преобразователь, как этот

... 
Binding="{Binding ValueToBind, Converter={SomeConverter},ConverterParameter=YourParameteres}" 
... 

И затем использовать его в преобразователе в качестве параметра объекта

+0

Спасибо! но это не то, что я ищу. Мне нужно оценить значение нажатием кнопки и использовать его в конвертере. Я не понимаю, как правильно передать его в конвертер. –

+0

Пожалуйста, вставьте свой бутон и код его события. – Marcin

+0

Спасибо за ваше время! Я обновил вопрос –

Смежные вопросы