绑定方法返回对象属性:XAML中GetDisplayParams返回值的Width绑定失败
问题根因
XAML绑定引擎仅支持绑定公共属性,你在绑定路径中写的GetDisplayParams是Template类的实例方法,不属于可绑定的属性范畴,所以绑定无法解析路径,触发报错。
解决方案
方案1:新增属性包装方法(推荐,改造成本最低)
给Scripting.Template类新增一个只读属性,封装GetDisplayParams()方法的调用:
namespace Scripting { public class Template { // 原有代码保持不变 public TemplateDisplayParams DisplayParams => GetDisplayParams(); } }
修改XAML绑定路径为新增的属性即可:
<TextBox Text="{Binding DisplayParams.Width}"/>
方案2:使用ObjectDataProvider调用方法(适配无法修改Template类源码的场景)
如果不能修改Template类的源代码,可以在XAML资源中通过ObjectDataProvider调用目标方法获取返回值:
<!-- 对应视图的资源块,Window/UserControl的Resources都可以 --> <Window.Resources> <!-- 注意要先引入Scripting命名空间,对应你自己的命名空间前缀替换即可 --> <ObjectDataProvider x:Key="ParamsProvider" ObjectType="{x:Type scripting:Template}" MethodName="GetDisplayParams"/> </Window.Resources> <!-- 绑定指定源为上面定义的ObjectDataProvider --> <TextBox Text="{Binding Width, Source={StaticResource ParamsProvider}}"/>
补充注意事项
如果Width属性值会在运行时变化,需要TemplateDisplayParams类实现INotifyPropertyChanged接口,否则界面不会自动同步最新的属性值。
内容的提问来源于stack exchange,提问作者Tulesha
相关产品推荐
相关产品推荐

