2013-10-06 6 views
4

Взгляните на следующий XAML сниппета:IValueConverter только вызывается при прокрутке на DataGrid

<DataGridTextColumn.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="Background" Value="White"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Block.TextAlignment" Value="Center"/> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <SolidColorBrush> 
        <SolidColorBrush.Color> 
         <MultiBinding Converter="{StaticResource VAPBrushConverter}"> 
          <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}"/> 
          <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/> 
         </MultiBinding> 
        </SolidColorBrush.Color> 
       </SolidColorBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</DataGridTextColumn.CellStyle> 

IValueConverter вызывается только когда я прокручиваю на сетке. Внутри DataGridCell есть TextBlock, и единственный раз, когда вызывается IValueConverter, это когда свойство TextBlock.Text - DependencyProperty.UnsetValue.

Может ли кто-нибудь сказать мне, когда вызывается IValueConverter, и если что-то я могу сделать с моим кодом в настоящее время, который может решить эту проблему? Чтобы уточнить, проблема заключается в том, что фон устанавливается только IValueConverter, когда я просматриваю DataGrid.

+0

У меня такая же проблема. –

+1

Вы преувеличиваете это с помощью MultiBindings и Converters. Создайте правильную ViewModel для ваших строк и получите некоторое «более простое» значение для привязки к или использования «DataTriggers». –

+0

@HighCore Я понимаю, что вы говорите, но мои модели ViewModels преобразуются в JSON напрямую для использования в другом API, поэтому я не могу добавить случайные свойства только для своего внешнего приложения. Я мог бы создать своего рода декоратор, но я бы предпочел использовать конвертер для согласованности. – Sherlock

ответ

0

Я решил эту проблему, установив связывание в качестве текущего элемента в источнике предметов, например:

<Binding Path="."/> 
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/> 

Похоже, что проблема заключается в том, что IValueConverter вызывается только тогда, когда прибудет/комплект аксессоры являются называется. Я передавал DataGridCell в привязке, которая только получает/устанавливает при прокрутке. Содержимое ячейки получает/устанавливается всякий раз, когда изменяется значение, поэтому это означает, что IValueConverter будет соответствующим образом обновляться.