nas*_*kew 5 silverlight wpf xaml binding mvvm
我是MVVM的新手,我理解MVVM的一些好处,而不是xaml背后的简单代码(例如VM的可测试性).我们正在使用Caliburn Micro来执行某些绑定,但这有点无关紧要,我可以使用特定的绑定{绑定...},我的问题或多或少会保持不变.
我理解VM如果一切都正确完成就不应该知道V的逻辑,但似乎因为我们在V和VM之间使用动态运行时绑定,编译器无法检查每个绑定的合法性表达.例如,如果我有一个名为UserName的UI组件,然后将卡利尝试绑定,要叫用户名在运行时VM性能(类似于做这样的事情的价值="{绑定用户名}").但是,如果我重命名我的VM属性或拼错UI组件名称或绑定表达式,我们在运行时之前没有任何问题的迹象.
在我看来,能够告诉xaml UI组件或页面将被绑定到特定接口将是非常好的,这样编译器就可以完成一些必须完成的工作(由测试部门(这是我经常).
有没有办法告诉xaml我们绑定到接口或对象类型?是否有一些工具可以插入xaml应用程序来验证绑定?
虽然编译器不支持 XAML 的编译时检查,但您可以通过编写自定义生成任务(通过 XAMLReader类实例化每个 XAML 文件) ,然后使用自定义 TraceListener侦听绑定错误来实现大致相同的结果。
除此之外,如果您准备使用代码进行数据绑定,则可以创建直接引用属性名称的绑定。类似于以下内容(未经测试)
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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1448 次 |
最近记录: |