UWP中修改TextBlock值后界面不更新问题求助
问题原因与解决方法
核心问题
你在MyDialog.xaml里给TextBlock的Text属性绑定用了RelativeSource={RelativeSource Mode=TemplatedParent},但这个模式只适合在控件模板(ControlTemplate)内部绑定到模板所属的控件实例。你的MyDialog是普通UserControl,并没有使用模板结构,所以这个绑定找不到ForTest属性的正确来源,导致后台值更新后界面无法同步刷新。
修复方案
修改TextBlock的绑定方式,两种方案任选其一:
方案1:使用RelativeSource Mode=Self绑定到UserControl自身
直接将绑定的相对源指向UserControl实例本身:
<TextBlock x:Name="forTestDisplay" FontSize="16" TextWrapping="Wrap" Text="{Binding ForTest, RelativeSource={RelativeSource Mode=Self}}" />
方案2:通过ElementName绑定到UserControl
先给UserControl添加x:Name属性:
<UserControl ... d:DesignHeight="100" d:DesignWidth="200" x:Name="MyDialogControl" >
然后修改TextBlock的绑定:
<TextBlock x:Name="forTestDisplay" FontSize="16" TextWrapping="Wrap" Text="{Binding ForTest, ElementName=MyDialogControl}" />
验证效果
修改完成后重新运行程序,DispatcherTimer每秒更新myDialog.ForTest的值时,TextBlock会实时显示当前的时间,界面刷新恢复正常。
内容的提问来源于stack exchange,提问作者ricky rocky
相关产品推荐
相关产品推荐

