INotifyPropertyChanged targeting C# .Net 3.0
本文关键字:Net targeting INotifyPropertyChanged | 更新日期: 2023-09-27 18:36:54
我一直在努力使用 mvp 在 C# 中连接一些 winforms。UI开发并不是我的强项,我一直在寻找一种重构证明的方式来实现INotifyPropertyChanged,而不必求助于字符串来触发更改通知。
msdn 示例 http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx 以及我见过的大多数其他示例都让我感到错误的方法,尤其是在重构属性时必须更改字符串这一事实方面。
我在使用表达式和 func 的堆栈溢出上看到的所有其他选项,遗憾的是,在我支持的旧解决方案中不可用,所以我想知道是否有任何一种方法可以复制使用表达式树获取属性名称的当前解决方案。
我一直看到的解决方案的一个例子。
public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>> expression)
{
MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name;
}
干杯
对于 .NET 3.0,实现实现INotifyPropertyChanged
的防重构方法的最佳方法是通过某种形式的代码生成。例如,PostSharp(一种 AOP 工具)使用 IL 编织在编译后步骤中修改生成的程序集。您可以在此处找到INotifyPropertyChanged
的相关示例。
顺便说一下,实现INotifyPropertyChanged
的最新技术 (C# 5) 方式根本不需要特殊工具:有 [CallerMemberName]
属性。