3

我一直在努力使用 mvp 在 C# 中连接一些 winforms。UI 开发并不完全是我的强项,我一直在寻找一种重构证明方法来实现 INotifyPropertyChanged,而不必求助于字符串来触发更改通知。

msdn 示例http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx以及我所见过的大多数其他示例都让我觉得这是错误的做法,尤其是关于事实上,如果您重构属性,则必须更改字符串。

我在 stackoverflow 上看到的所有其他选项都使用表达式和 func,遗憾的是,我支持的旧解决方案中没有工具,所以我想知道是否有人有办法复制使用表达式树来获取属性名称的当前解决方案。

我看到的解决方案的一个例子。

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>>      expression) 
{
 MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name; 
}

干杯

4

1 回答 1

6

对于 .NET 3.0,实现可重构的实现方式的最佳选择 INotifyPropertyChanged是通过某种形式的代码生成。例如,PostSharp(一种 AOP 工具)使用 IL-weaving 在编译后步骤中修改生成的程序集。INotifyPropertyChanged 您可以在此处找到相关示例。

顺便说一句,最先进的(C# 5)实现方式INotifyPropertyChanged 根本不需要特殊工具:有[CallerMemberName]属性.

于 2012-06-10T17:46:50.613 回答