c# - 通过 T4 代码生成自动 INotifyPropertyChanged 实现?

标签 c# t4 inotifypropertychanged

我目前正在设置我的一个新项目,并且想知道我如何才能实现我的 ViewModel 类确实具有 INotifyPropertyChanged 支持,而不必自己手动编写所有属性。

我研究了 AOP 框架,但我认为它们只会用另一个依赖项破坏我的项目。

所以我考虑使用 T4 生成属性实现。

设置是这样的:我有一个 ViewModel 类,它仅声明其属性背景变量,然后我使用 T4 从中生成属性实现。

例如,这将是我的 ViewModel:

public partial class ViewModel
{
    private string p_SomeProperty;
}

然后 T4 将遍历源文件并查找名为“p_”的成员声明并生成如下文件:

public partial class ViewModel
{
    public string SomeProperty
    {
        get
        {
            return p_SomeProperty;
        }
        set
        {
            p_SomeProperty= value;
            NotifyPropertyChanged("SomeProperty");
        }
    }
}

这种方法有一些优点,但我不确定它是否真的有效。所以我想把我的想法作为一个问题发布到 StackOverflow 上,以获得一些反馈,也许还有一些建议可以做得更好/更容易/更安全。

最佳答案

Here's a great post by Colin Eberhardt通过使用 EnvDTE 直接从 Visual Studio 检查自定义属性,从 T4 生成依赖属性。调整它以检查字段并适本地生成代码应该不难,因为该帖子包含用于浏览代码节点的简单实用方法。

请注意,在 VS 中使用 T4 时,您不应在自己的程序集中使用反射,否则它们将被锁定并且您必须重新启动 Visual Studio 才能重建。

关于c# - 通过 T4 代码生成自动 INotifyPropertyChanged 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968406/

相关文章:

c# - Enyim Memcached Client 不写/读数据

T4 引用的组装 block 构建

c# - 如何在繁忙的过程中快速处理事件,有Update命令吗?

xaml - ListView 绑定(bind)仅在滚动时更新 UI

c# - 如果 Task.Delay 未标记为异步,它如何等待?

c# - 淡入淡出表格

c# - 读取 UTF8 文件,问题

c# - 使用 EnvDTE 收集项目中的用户类列表

.net - T4包含项目根目录中的文件路径

c# - UserControl 中的数据绑定(bind)在设计时不起作用?