gpt4 book ai didi

wpf - 编译时检查绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 19:13:51 25 4
gpt4 key购买 nike

我对 MVVM 比较陌生,并且我了解 MVVM 相对于 xaml 背后的简单代码的一些好处(例如 VM 的可测试性)。我们正在使用 Caliburn Micro 来执行一些绑定(bind),但这有点无关紧要,我可以使用特定绑定(bind) {binding ...} 我的问题或多或少保持不变。

我理解如果一切都正确完成,VM应该对V一无所知的逻辑,但似乎因为我们在V和VM之间使用动态运行时绑定(bind),编译器无法检查每个绑定(bind)的合法性表达。例如,如果我有一个名为 UserName 的 UI 组件,则 Caliburn 将尝试在运行时将其绑定(bind)到名为 UserName 的 VM 属性(类似于执行 Value="{binding UserName}"之类的操作)。但是,如果我重命名我的 VM 属性或拼错 UI 组件名称或绑定(bind)表达式,我们直到运行时才得到问题的指示。

在我看来,能够告诉 xaml 一个 UI 组件或页面将绑定(bind)到一个特定的界面,这样编译器就可以完成一些原本必须完成的工作,这将是非常好的(并重做)由测试部门(我经常这样做)。

有没有办法告诉 xaml 我们正在绑定(bind)到接口(interface)或对象类型?是否有一些工具可以插入 xaml 应用程序来验证绑定(bind)?

最佳答案

虽然编译器不支持 XAML 的编译时检查,但您可以通过编写自定义构建任务通过 XAMLReader 实例化每个 XAML 文件来获得大致相同的结果。类,然后使用 custom TraceListener监听绑定(bind)错误。

除此之外,如果您准备使用代码进行数据绑定(bind),则可以创建直接引用属性名的绑定(bind)。类似于以下内容(未经测试)

Binding createBinding<TProperty>(Expression<Func<TProperty>> property, object source)
{
MemberExpression me = property.Body as MemberExpression;
if (me == null || me.Expression != property.Parameters[0]
|| me.Member.MemberType != MemberTypes.Property) {
throw new InvalidOperationException(
"Now tell me about the property");
}
Binding b = new Binding(me.Member.Name);
b.Source = source;

return b;
}

// sample code
Binding b = createBinding(()=>this.FontSize, this);
textBlock1.SetBinding(TextBlock.FontSizeProperty, b);

关于wpf - 编译时检查绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com