學習windows phone程式開發已經很長時間,對於mvvm也算比較熟悉了。最近自己打算寫一寫mvvm深入一點的東西,順利的實現了model和viewmodel註冊的**。回頭一用,突然看到我要通知介面屬性的改變是要通過封裝propertychanged事件中傳入字串的屬性名稱。這樣每個屬性修改,我就得修改我的屬性名字串,這樣豈不是很不方便?但在mvvm light中,可以通過在表示式樹中傳入要使用的屬性名的屬性呼叫即可,不由大為震動。
後來多方查證,以下**可以實現獲取乙個屬性的屬性名稱字串:
public string getpropertyname(expression> expr)
假設需要獲取的屬性的名稱是age,可以通過如下方式獲取到age的字串名稱即「age」:
console.writeline(getpropertyname(o => o.age));
這裡的o是表示式中的物件。這句**會輸出字串「age」到控制台上面。
但是如果屬性的資料型別不是int型別,使用上面的getpropertyname方法就不靈光了。虧得在寫model和viewmodel的註冊模組**時已經仔細研究過泛型,正好在這裡也用上,於是最終完整版本的方法出現在了下面:
public string getpropertyname(expression> expr)
這樣不論屬性的返回型別是什麼,都可以獲取到屬性的字串名稱了。 C 遍歷自定義物件,獲取屬性名 屬性值,設定屬性值
physiqueoutmodel physiqueoutmodel new physiqueoutmodel 自定義物件 type t physiqueoutmodel.gettype 獲得該類的type foreach propertyinfo pi in t.getproperties stri...
C 按屬性名反射獲取和設定物件屬性值
using system using system.collections.generic using system.reflection namespace test public class product set private int pkid public string productna...
獲取屬性名 PropertyNameHelper
獲取屬性名 propertynamehelper namespace ncs.infrastructure.querying return expr.tostring substring expr.tostring indexof 1 public static string resolveprop...