2012-06-12 10 views
0

xamDataGridDataTable에 바인딩되어 있으며 첫 번째 열에는 참조 값이 들어 있습니다. 다른 모든 열의 색상 지정은 셀의 값이 참조 열의 값과 같거나 다른지 여부에 따라 달라집니다. 논리는 변환기를 사용합니다.xamDataGrid 셀의 색상 변경

달성하고자하는 것은 다른 열을 첫 번째 위치로 이동하면 참조 열이되고 다른 모든 열의 색이 변경되어야합니다.

내가 FieldPositionChanged 이벤트를 수신하고, 그리드 레이아웃을 무효화하지만 작동하지 않습니다 해요 :

컨버터 중단 점은 있지만 모든 레코드에 대한 타격
grid.UpdateLayout(); 
grid.InvalidateVisual(); 

(만 2 ~ 3).

+0

사용중인 스타일을 제공 할 수 있습니까? – alhalama

답변

1

필드를 이동할 때 CellValuePresenterStyle을 설정하면 올바르게 업데이트되어야합니다. 다음과 같은 논리가이를 수행합니다 :

void XamDataGrid1_FieldPositionChanged(object sender, Infragistics.Windows.DataPresenter.Events.FieldPositionChangedEventArgs e) 
{ 
    FieldLayout layout = e.Field.Owner; 
    Field first = null; 
    foreach (Field f in layout.Fields) 
    { 
     if (f.ActualPosition.Column == 0) 
      first = f; 
    } 
    if (first != null) 
    { 
     SetCellValuePresenterStyle(e.Field.Owner, first); 
    } 
} 

void XamDataGrid1_FieldLayoutInitialized(object sender, Infragistics.Windows.DataPresenter.Events.FieldLayoutInitializedEventArgs e) 
{ 
    SetCellValuePresenterStyle(e.FieldLayout, e.FieldLayout.Fields[0]); 
} 

void SetCellValuePresenterStyle(FieldLayout layout, Field sourceField) 
{ 
    Binding sourceValueBinding = new Binding("DataItem[" + sourceField.Name + "]"); 
    foreach (Field f in layout.Fields) 
    { 
     if (f != sourceField) 
     { 
      Style cellValuePresenterStyle = new Style(typeof(CellValuePresenter)); 
      Binding compareValueBinding = new Binding("DataItem[" + f.Name + "]"); 
      MultiBinding styleBinding = new MultiBinding(); 
      styleBinding.Bindings.Add(sourceValueBinding); 
      styleBinding.Bindings.Add(compareValueBinding); 
      styleBinding.Converter = new EqualMultiValueConverter(); 
      DataTrigger trigger = new DataTrigger(); 
      trigger.Value = true; 
      trigger.Binding = styleBinding; 
      cellValuePresenterStyle.Triggers.Add(trigger); 
      Setter backgroundSetter = new Setter(Control.BackgroundProperty, Brushes.Green); 
      trigger.Setters.Add(backgroundSetter); 
      f.Settings.CellValuePresenterStyle = cellValuePresenterStyle; 
     } 
     else 
     { 
      f.Settings.CellValuePresenterStyle = null; 
     } 
    } 
} 
+0

감사합니다! 나중에 다시 시도 할 것입니다. –