我有一个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可以监听并更新自身.