2013-10-10 4 views
1

Быстрый вопрос.Знайте, когда изменился цвет строки + WPF + DataGrid

У меня есть DataGrid, который автоматически обновляется через SQL-Dependency. , и у меня есть триггер, настроенный для изменения BackgroundProperty на цвет, основанный на нескольких значениях (красных или зеленых). Я действительно надеялся использовать eventetter с моим триггером.

Мой вопрос: какой пожарный человек срабатывает, когда триггер меняет фон? Ive пытался DependencyPropertyDescriptor - который работает при проверке ItemsSource изменилось, но НЕ DataGridRow.BackgroundProperty или Control.BackgroundProperty (просто не срабатывает) с моей DependencyProperty как

var desc = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(Control)); 
desc.AddValueChanged(MyDataGrid,MyEventHandler); 

с моим событием, как это:

  DataGrid mygrid = sender as DataGrid; 
      var itemsSource = mygrid.ItemsSource as IEnumerable; 
      if (null != itemsSource) 
      {   
       foreach (var item in itemsSource) 
       { 
        var row = mygrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 
        if (null != row) 
        { 
         if (Equals(Brushes.Red, row.Background)) 
         { 
         //Do whatever 
         } 
        } 
       } 
      } 

, но строка всегда равна нулю - почему это ?. EDIT: он возвращает null, потому что он виртуализирован и не находится в режиме просмотра.

Я надеялся, чтобы быть в состоянии создать EventHandler пойти с eventsetter в моей DataTrigger

Спасибо заранее.

+0

Несомненно, ваш 'Trigger' изменяет цвет фона в зависимости от некоторого значения данных, не так ли? Почему бы вам просто не отслеживать соответствующее свойство данных? – Sheridan

+0

Ну, вот что - значение триггера, является динамическим (с (valueconverters)), основанным на другом sqltable – VisualBean

+0

Но, конечно же, на каком-то этапе это зависит от новых данных, входящих ... вы просто сказали, что он основан на другом SQL Таблица. Можете ли вы не перебирать входящие данные, чтобы найти все триггеры «Триггера» и действовать на этом этапе? – Sheridan

ответ

1

что предполагает @Sheridan, что вы уже знаете, когда цвет фона должен быть изменен так просто использовать эти данные и делать дополнительную работу, которую вы хотели,
, но если вы просто должны создать функцию обратного вызова для изменения фоновых, то вы можете используйте DependencyPropertyDescriptor для добавления измененных обработчиков:

var desc = DependencyPropertyDescriptor.FromProperty (Control.BackGroundProperty, typeof (Control)); desc.AddValueChanged (this, yourEventHandler);

+0

Не могу заставить это работать с DataGridRow – VisualBean

+0

@AlekCarlsen, что вы получаете? это не имеет значения, если DataGridRow или TextBox ... Опубликовать то, что вы пробовали – makc

+0

Ну, я могу заставить его загореться при изменении itemssource, но NOT, когда я использую ..DependencyPropertyDescriptor.FromProperty (Control.BackgroundProperty .. он не огонь при изменении фона – VisualBean

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