WinUI3中如何在ControlTemplate用Binding实现x:Bind等效绑定?
在WinUI 3中用Binding实现静态单例属性的绑定(替代x:Bind)
要在ControlTemplate中用Binding实现和你给出的x:Bind等效的效果,需要用**{x:Static}标记扩展**来指定静态单例的来源,正确的写法有两种:
写法一:指定Source为静态单例实例,Path指向实例属性
<TextBlock x:Name="cbText" Text="{Binding CurrentCaptionButtonPathSize, Source={x:Static viewmodels:ShellViewModel.TheShellViewModel}, Mode=OneWay}"/>
写法二:使用括号语法直接绑定静态属性链
<TextBlock x:Name="cbText" Text="{Binding Path=(viewmodels:ShellViewModel.TheShellViewModel.CurrentCaptionButtonPathSize), Mode=OneWay}"/>
为什么之前的写法失败?
你之前尝试的Source=viewmodels:ShellViewModel是把字符串viewmodels:ShellViewModel作为绑定源,而不是实际引用ShellViewModel类的静态成员。必须通过{x:Static}来明确引用静态属性TheShellViewModel,Binding才能识别到对应的单例实例。
关键说明
- 确保XAML资源字典中已经正确声明了viewmodels命名空间:
xmlns:viewmodels="using:PFSI.ViewModels" - ShellViewModel的
TheShellViewModel静态属性已经在构造函数中完成单例初始化,保证绑定时有有效的实例 - 两种写法都能实现和x:Bind一致的OneWay绑定效果,且不需要依赖ControlTemplate的DataContext或代码隐藏逻辑
内容的提问来源于stack exchange,提问作者aturnbul
相关产品推荐
相关产品推荐

