【问题标题】:Monotouch.Dialog: Backing Field ExclusionMonotouch.Dialog:支持字段排除
【发布时间】:2011-01-26 12:55:22
【问题描述】:

使用令人惊叹的 MonoTouch.Dialog 工具集,我如何确保不显示支持字段。当我将 [Entry] 属性分配给 get;set;属性,我得到以下渲染:

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

【问题讨论】:

  • 我不确定您到底想避免显示哪个部分。你的问题不清楚
  • 我希望不显示支持字段

标签: xamarin.ios monotouch.dialog


【解决方案1】:

这是 MonoTouch.Dialog 中的一个错误,您最好的选择是不使用属性,而是直接使用字段或更改 MonoTouch.Dialog 的本地副本以防止创建不公开的元素(目前它使用 public和私有方法)。

改变这一行:

var members = o.GetType ().GetMembers (BindingFlags.DeclaredOnly | BindingFlags.Public |
                                       BindingFlags.NonPublic | BindingFlags.Instance);

与:

var members = o.GetType ().GetMembers (BindingFlags.DeclaredOnly | BindingFlags.Public |
                                       BindingFlags.Instance);

【讨论】:

  • 谢谢米格尔。对于其他需要它的人来说,它在 Reflect.cs 的第 202 行左右
【解决方案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。

【讨论】:

  • 我回去检查了原始的 MonoTouch.Dialog 源。添加我的 GetMembers() 方法并将 Reflect.cs 中的第 202 行替换为: var members = GetMembers(o);
【解决方案3】:

我必须创建实际的支持字段(不使用自动属性),然后将 [Skip] 属性添加到它们。 Miguel 会知道是否有更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多