2011-01-26 10 views
2

驚くべきMonoTouch.Dialogツールセットを使用して、Backingフィールドが表示されないようにする方法を教えてください。私が[Entry]属性をget; set;に代入すると、プロパティには、私は次のようにレンダリングされます: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); –