2011-01-26 65 views
2

使用惊人的MonoTouch.Dialog工具集,我如何确保不显示支持字段。当我将一个[Entry]属性赋值给get; set;财产,我得到以下渲染:Monotouch.Dialog:支持字段排除

[Caption("Weight")] 
[Entry(Placeholder = "Kilograms", KeyboardType = UIKeyboardType.PhonePad)] 
public string Weight { get; set; } 

enter image description here

+0

我不知道到底要避免被显示哪些部分。从您的问题 – 2011-01-26 16:44:37

+0

不清楚我希望后台字段不显示 – 2011-01-27 02:22:46

回答

3

这是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); 
0

我不得不创建实际的支持字段(不使用自动属性),然后将[跳过]属性添加到他们。米格尔会知道是否有更好的方法。

2

我认为这是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中的& &。

+0

我回去检查原始的MonoTouch.Dialog源。添加我的GetMembers()方法并将Reflect.cs中的第202行替换为: var members = GetMembers(o); – 2011-01-26 19:53:44