2013-11-25 3 views
0

здесь дело: стилизация текстового блока DataGridTextColumn для datagrid. Мне нужно форматировать текстовый блок по его значению, сравнивая его с другим связанным значением.WPF DataGridTextColumn привязка и стиль

Что я хочу достичь, это что-то вроде этого:

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=BEST}" Value="{RelativeSource Mode=Self}"> 
      <Setter Property="Background" Value="Green" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Что не представляется возможным, так как стоимость DataTrigger не может быть относительным источником.

Так я попытался с MultiBinding

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}"> 
<Style.Triggers> 
    <DataTrigger Value="True"> 
    <DataTrigger.Binding> 
     <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}"> 
     <Binding Path="BEST" /> 
     <Binding RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
    </DataTrigger.Binding> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 

не повезло: TextBlock Text свойство пусто, вероятно, потому, что стиль применяется до фактического связывания выполняется.

У меня больше нет идей.

Пожалуйста, помогите!

+0

Пожалуйста, постарайтесь более четко объяснить свои требования. – Sheridan

+0

Мне нужно сравнить значение текстового блока DataGridTextColumn с другим связыванием. Почему текстовый блок всегда пуст? – Valerio

ответ

1

Я не уверен, если это будет работать, но я заметил, что вы забыли указать Binding.Path в вашем MultiConverter ... Например, попробуйте следующее:

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}"> 
    <Style.Triggers> 
     <DataTrigger Value="True"> 
      <DataTrigger.Binding> 
       <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}"> 
        <Binding Path="BEST" /> 
        <Binding Path="Text" RelativeSource="{RelativeSource Mode=Self}" /> 
       </MultiBinding> 
      </DataTrigger.Binding> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

nope, со связующим путем возвратите сам текстовый блок, все еще без текста, оцененного – Valerio

+0

Хорошо, я только что обновил код ... попробуйте еще раз. – Sheridan

+0

Пробовал обновленный код, тот же результат. – Valerio

0

Если вы хотите изменить стиль текстовый блок, основанный на содержимом текстового блока, почему бы просто не добавить пенинг на фон текстового блока и использовать конвертер для проверки содержимого текста?

Другими словами, привяжите как текст, так и фон к тому же источнику и используйте конвертер с фоном и в конвертере, соответствующий содержимому, и верните правильный стиль фона.

Если вам нужно что-то еще, оставляйте комментарий, чтобы мы лучше знали, в чем проблема.

+0

Проблема в том, что я могу полагаться только на значение времени исполнения. Этот стиль привязан к нескольким столбцам. – Valerio

+0

Ну, это зависит от того, зависит ли стиль от нескольких свойств от одного и того же базового объекта, который вы могли бы привязать к самому объекту и проверить все свойства.И что касается времени выполнения, то все конвертеры используются во время выполнения ... –

0

Я немного изменил свой код. Вместо того, чтобы полагаться на значение ячейки, в поле «BEST» я передал имя столбца. Затем, используя конвертер, я проверяю Текущий текстовый блок (как предложено @Sheridan) -> DatagridCell -> Заголовок столбца , если он совпадает, я меняю стиль на этом текстовом блоке.

Спасибо всем !!!

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