使用令人惊叹的MonoTouch.Dialog工具集,我如何确保不显示支持字段。当我将一个Entry属性分配给get;set;属性时,我得到了以下呈现:
[Caption("Weight")]
[Entry(Placeholder = "Kilograms", KeyboardType = UIKeyboardType.PhonePad)]
public string Weight { get; set; }

发布于 2011-01-27 13:31:15
这是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);发布于 2011-01-27 03:33:07
我认为这是MonoTouch.Dialog中的一个bug。我已经在我的项目中对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.MVVM使用的是我的MonoTouch.Dialog版本,它不使用字段,只使用属性。如果您想在字段上使用属性,请删除上面代码中的&& m.MemberType != MemberTypes.Field。
发布于 2011-01-27 02:58:42
我必须创建实际的支持字段(不使用自动属性),然后向它们添加Skip属性。不过,如果有更好的办法,米格尔会知道的。
https://stackoverflow.com/questions/4804787
复制相似问题