我有一个Textblock,如果属性为True或False,我正在尝试更改Text属性的值。我遇到的问题是可以在屏幕上的不同事件上更改标志(来自其他组合框的onchange事件)。
我不确定如何让这个数据触发器工作,因为我不知道它何时更改了值。
<TextBlock Grid.Row="9" HorizontalAlignment="Right" Text="Some Old Value:" VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="False" >
<Setter Property="Text" Value="Different Text:"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
我在一些组合框中看到有UpdateSourceTrigger=PropertyChanged
,但我没有看到在TextBlock中实现它的方法。
答案 0 :(得分:24)
Text
的第一,否则无论触发器是否成功触发,由于Dependency property value precedence order,Text都不会从样式设置器中获取值}。 本地值的优先级高于样式设置器值。
<TextBlock Grid.Row="9" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="Some Old Value:"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="False" >
<Setter Property="Text" Value="Different Text:"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
第二次,如果IsChecked
属性位于ViewModel(实现INotifyPropertyChanged )并且TextBlock DataContext
正确指向ViewModel实例,则不要不用担心。
只要确保ViewModel中的属性IsChecked
发生更改,就会引发PropertyChanged
事件,以便UI可以监听并自行更新。