学习Windows Phone程序开发已经很长时间,对于MVVM也算比较熟悉了。最近自己打算写一写MVVM深入一点的东西,顺利的实现了Model和ViewModel注册的代码。回头一用,突然看到我要通知界面属性的改变是要通过封装PropertyChanged事件中传入字符串的属性名称。这样每个属性修改,我就得修改我的属性名字符串,这样岂不是很不方便?但在MVVM Light中,可以通过在表达式树中传入要使用的属性名的属性调用即可,不由大为震动。
后来多方查证,以下代码可以实现获取一个属性的属性名称字符串:
public string GetPropertyName(Expression<Func<Test, int>> expr)
{
return ((MemberExpression)expr.Body).Member.Name;
}
假设需要获取的属性的名称是Age,可以通过如下方式获取到Age的字符串名称即“Age”:
Console.WriteLine(GetPropertyName(o => o.Age));
这里的o是表达式中的对象。这句代码会输出字符串“Age”到控制台上面。
但是如果属性的数据类型不是int类型,使用上面的GetPropertyName方法就不灵光了。亏得在写Model和ViewModel的注册模块代码时已经仔细研究过泛型,正好在这里也用上,于是最终完整版本的方法出现在了下面:
public string GetPropertyName<T>(Expression<Func<Test, T>> expr)
{
return ((MemberExpression)expr.Body).Member.Name;
}
这样不论属性的返回类型是什么,都可以获取到属性的字符串名称了。
本文详细介绍了在WindowsPhone程序开发过程中,如何利用MVVM模式进行深入开发,特别关注了如何简化属性名称变更带来的困扰,并通过实例展示了如何使用表达式树获取属性名称,同时提供了通用的代码实现,确保不论属性类型如何变化都能有效获取其名称。此外,还对比了MVVMLight中获取属性名称的灵活性,提升了开发效率。
1525

被折叠的 条评论
为什么被折叠?



