Свойство связывания обновления wpf при изменении свойства конвертера - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть TextBlock, свойство Foreground которого связано с MultiBinding следующим образом:

<TextBlock.Foreground>
    <MultiBinding Converter="{StaticResource BlToBrshConv1}">
        <Binding Path="SomePropertyOfOwnerClass" />
        <Binding Path="AnotherProperty"/>
    </MultiBinding>
</TextBlock.Foreground>

Преобразователь BlToBrshConv1 имеет следующий вид:

Class BlToBrshConv1
 Implements IMultiValueConverter  
Property InheritedBrush as Brush
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
    Try
        Dim b1 As Boolean = CBool(values(0))     
        Dim b2 As Boolean = CBool(values(1))     
        If b1 = True AndAlso b2 = True Then
            ' Return SomeBrush0
        ElseIf b1 Then     
            '  Return SomeBrush1
        Else
            Return InheritedBrush
        End If
    Catch ex As Exception
        Return InheritedBrush
    End Try

Теперь моя проблема заключается в том, чтосвойство 'InheritedBrush' самого конвертера, мне нужно обновить кисть 'Foreground'.

Кисть Foreground не обновляется, поскольку связанные свойства ("SomePropertyOfOwnerClass" и "AnotherProperty") не изменились.

Есть идеи?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете изменить привязку с помощью триггеров.

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
                    <Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding AnotherProperty}">
                    <Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
                </DataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
                        <Condition Binding="{Binding AnotherProperty}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
...