使用驚人的MonoTouch.Dialog工具集,我如何確保不顯示支持字段。當我將一個[Entry]屬性賦值給get; set;財產,我得到以下渲染:Monotouch.Dialog:支持字段排除
[Caption("Weight")]
[Entry(Placeholder = "Kilograms", KeyboardType = UIKeyboardType.PhonePad)]
public string Weight { get; set; }
使用驚人的MonoTouch.Dialog工具集,我如何確保不顯示支持字段。當我將一個[Entry]屬性賦值給get; set;財產,我得到以下渲染:Monotouch.Dialog:支持字段排除
[Caption("Weight")]
[Entry(Placeholder = "Kilograms", KeyboardType = UIKeyboardType.PhonePad)]
public string Weight { get; set; }
這是MonoTouch.Dialog中的一個錯誤,最好的選擇是不使用屬性,而是直接使用字段或更改MonoTouch.Dialog的本地副本,以防止創建元素(如果它們不是公共的)公共和私人方法)。
改變這一行:
var members = o.GetType().GetMembers (BindingFlags.DeclaredOnly | BindingFlags.Public |
BindingFlags.NonPublic | BindingFlags.Instance);
有了:
var members = o.GetType().GetMembers (BindingFlags.DeclaredOnly | BindingFlags.Public |
BindingFlags.Instance);
我不得不創建實際的支持字段(不使用自動屬性),然後將[跳過]屬性添加到他們。米格爾會知道是否有更好的方法。
我認爲這是MonoTouch.Dialog中的一個錯誤。我已經在我的項目作出的BindingContext大的變化,所以我不能指出確切的地方進行修正,但是這可能幫助:
private MemberInfo[] GetMembers(object dataContext)
{
return dataContext.GetType().GetMembers(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance).Where(m =>
{
var methodInfo = m as MethodBase;
//Bug 662867: var skip = m.GetCustomAttribute<SkipAttribute>(true) != null;
var skip = m.Name == "ToString";
return (methodInfo == null || !methodInfo.IsConstructor && !methodInfo.IsSpecialName) && m.MemberType != MemberTypes.Field && !skip;
}).ToArray();
}
正如你可以在代碼中看到上面,我是做了具體請檢查!methodInfo.IsSpecialName,它們是自動屬性的Get和Set方法。您可以使用此方法獲取對象的成員。
我的項目使用我的版本的MonoTouch.Dialog的MonoTouch.MVVM不使用字段和唯一的屬性。如果要使用字段上的屬性,請在上面的代碼中刪除m.MemberType!= MemberTypes.Field中的& &。
我回去檢查原始的MonoTouch.Dialog源。添加我的GetMembers()方法並將Reflect.cs中的第202行替換爲: var members = GetMembers(o); – 2011-01-26 19:53:44
我不知道到底要避免被顯示哪些部分。從您的問題 – 2011-01-26 16:44:37
不清楚我希望後臺字段不顯示 – 2011-01-27 02:22:46