Monotouch.Dialog:支持字段排除
使用惊人的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