2011-01-26 5 views
2

놀라운 MonoTouch.Dialog 도구 세트를 사용하면 Backing 필드가 표시되지 않도록 할 수 있습니다. get에 [Entry] 속성을 할당 할 때; 속성은, 나는 렌더링 된 다음 얻을 :Monotouch.Dialog : Backing Field Exclusion

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

enter image description here

+0

나는 정확히 표시되지 않도록하려면 어떤 부분이 확실하지 않다. 귀하의 질문에서 명확하지 않았습니다 –

+0

뒷받침 필드가 표시되지 않기를 바랍니다 –

답변

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

고마워 미구엘. 필요한 다른 모든 사람들을 위해 Reflect.cs에서 202 행 주위에 있습니다. –

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(); 
    } 

을 내가 특정을하고있는 중이 위에 당신이 코드에서 볼 수 있듯이 자동 속성의 Get 및 Set 메서드 인! methodInfo.IsSpecialName을 확인하십시오. 이 메서드를 사용하여 객체의 멤버를 가져올 수 있습니다.

MonoTouch.Dialog 내 버전을 사용하는 프로젝트 MonoTouch.MVVM은 필드와 속성 만 사용하지 않습니다. 필드에 속성을 사용하려면 위 코드에서 & &m.MemberType! = MemberTypes.Field를 제거하십시오.

+0

원래의 MonoTouch.Dialog 소스를 확인했습니다. 내 GetMembers() 메서드를 추가하고 Reflect.cs의 202 행을 다음으로 바꿉니다. var members = GetMembers (o); –

관련 문제