db_*_*db_ 13 data-binding wpf mvvm
我正在研究基于WPF的应用程序.环境是VS2008 SP1与.NET 3.5 SP 1.在我们的开发中,我们广泛使用MVVM模式.
即应用程序开发人员编写模型和ViewModels(C#),然后UI开发人员将使用WPF绑定(XAML)编写视图.应用程序开发人员还在ViewModel之上编写单元测试.我们正在使用持续集成方法,我们正在构建并执行每个修改的单元测试
问题是在XAML中缺少数据绑定正确性验证的过程或工具.例如:
我的问题是"是否有任何工具或方法可以帮助我们在编译时验证XAML中数据绑定的正确性?"
本文讨论了您的问题的解决方案.
基本思想是创建一个静态(c#)类的ViewModel MetaData集,其中包含您可以在xaml中使用的ViewModel类属性的字符串值.本文介绍了如何使用T4文本生成来创建这些静态元数据类.您可以使用您偏好的任何代码生成工具.
所以你的VM有以下几点:
namespace Mine
{
public class MyViewModel
{
public int MyInt {get;set;}
public string MyString {get;set;}
}
}
Run Code Online (Sandbox Code Playgroud)
你的代码生成会创建这个:
namespace Mine.MetaData
{
public static class MyViewModelMetaData
{
public const string MyInt = "MyInt";
public const string MyString = "MyString";
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的xaml中你将命名空间添加到你的xaml并将你的控件绑定到元数据类
<TextBox Text="{Binding Path={x:Static Metadata:MyViewModelMetadata.MyInt}}"/>
Run Code Online (Sandbox Code Playgroud)
如果您使用像resharper这样的加载项,那么它将为您提供静态类的属性的智能感知,并且还因为您在静态类中引用了一个确切的属性,当静态类重新生成时,您的xaml不应该编译.
它很漂亮,我认为它很棒,它有机会让大多数人保持理智,但你的里程可能会有所不同.:)
编辑:
顺便说一句,我不买"ViewModels与视图紧密耦合".在我看来,视图与它们的ViewModel有着千丝万缕的联系,但它应该只是一种方式.ViewModels应完全独立于任何视图实现.它就像ViewModel是接口,View是具体实现的类.因此,我没有在我的ViewModel中添加任何特定于WPF的属性(例如,可见性枚举),因为这使我使用WPF永恒(这不是一件坏事:)),但它会影响维护.
| 归档时间: |
|
| 查看次数: |
4326 次 |
| 最近记录: |