Каков порядок установки свойств в XAML? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть TextBlock с двумя свойствами (Text и Foreground), привязанными к одному и тому же свойству ViewModel.

Оба также имеют конвертеры.Один из преобразователей проверяет свойство Text и возвращает тире, если значение равно NaN.Другой проверяет, что значение выше, ниже или равно нулю, и соответственно устанавливает передний план на разные цвета.

Пример XAML:

<TextBlock>

       <TextBlock.Text>
            <Binding Path="AvgDistance" StringFormat="{}{0:N1}"                        
                  Converter="{x:Static converter:ValueToDash.Instance}"/>
       </TextBlock.Text>        

       <TextBlock.Foreground>                                                    
          <MultiBinding Converter="{x:Static converter:ValueToColor.Instance}">                                                       
             <Binding Path="AvgDistance"/>
             <Binding ElementName="currentPeriod" Path="IsChecked" />
           </MultiBinding>
       </TextBlock.Foreground>  

</TextBlock>

Теперь мне нужно, чтобы преобразователь ValueToDash запустил до преобразователя ValueToColor, но это всегда наоборот.

Кажется, что сначала устанавливается свойство Foreground, а только потом устанавливается свойство Text.

Почему это так?И можно ли изменить порядок настройки?

1 Ответ

0 голосов
/ 14 сентября 2018

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

Вместо этого вы можете добавить еще одну привязку к вашему MultiBinding, которая привязывается к свойству Text TextBlock:

<TextBlock>

    <TextBlock.Text>
        <Binding Path="AvgDistance" StringFormat="{}{0:N1}"                        
                  Converter="{x:Static converter:ValueToDash.Instance}"/>
    </TextBlock.Text>

    <TextBlock.Foreground>
        <MultiBinding Converter="{x:Static converter:ValueToColor.Instance}">
            <Binding Path="AvgDistance"/>
            <Binding ElementName="currentPeriod" Path="IsChecked" />
            <Binding Path="Text" RelativeSource="{RelativeSource Self}"/>
        </MultiBinding>
    </TextBlock.Foreground>

</TextBlock>

Тогда преобразователь ValueToColor будет вызываться (снова) всякий раз, когда для свойства Text устанавливается какое-то новое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...