文本块的数据触发器

9

我有一个文本块(Textblock),如果属性为True或False,我想要更改它的Text属性的值。我遇到的问题是这个标志(flag)可能会在屏幕上的不同事件(onchange事件来自其他组合框)中被更改。

我不确定如何使数据触发器(datatrigger)工作,因为我认为它不知道值何时已更改。

<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个回答

41

首先,要在样式设置器中设置默认的Text,否则无论触发器是否成功触发,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可以监听并更新自身。


非常感谢关于优先级顺序的有用点,这对我们很有帮助! - Dan
你的回答节省了我的时间。谢谢。 - Siddhant maurya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接