我有一个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>
现在我需要在 ValueToColor 转换器之前触发 ValueToDash 转换器,但反之亦然。
Foreground
属性似乎总是先设置,然后才设置Text
属性。
为什么会这样?是否可以颠倒设置顺序?
不应依赖于设置属性的顺序。
相反,您可以做的是向MultiBinding
添加另一个绑定,该绑定绑定到TextBlock
的Text
属性:
<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>
然后,每当Text
属性设置为某个新值时,就会(再次(调用ValueToColor
转换器。