Textblock的DataTrigger

web*_*ad3 5 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>
Run Code Online (Sandbox Code Playgroud)

我在一些组合框中看到有UpdateSourceTrigger=PropertyChanged,但我没有看到在TextBlock中实现它的方法.

Roh*_*ats 26

首先Text在样式设置器中设置默认值,否则无论触发器是否成功触发,由于依赖属性值优先顺序,Text不会从Style setter中获取值.本地值的优先级高于样式设置器值.

<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>
Run Code Online (Sandbox Code Playgroud)

其次,如果IsChecked属性驻留在ViewModel中(实现INotifyPropertyChanged)并且TextBlock DataContext正确指向ViewModel实例,则不必担心它.

只需确保每当IsCheckedViewModel中的属性发生更改时,PropertyChanged都会引发一个事件,以便UI可以监听并更新自身.

  • 谢谢!那很有效.我很欣赏这个链接! (2认同)