Textblock的DataTrigger

时间:2013-12-30 20:26:15

标签: c# wpf xaml

我有一个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中实现它的方法。

1 个答案:

答案 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可以监听并自行更新。