Xamarin Forms: Как получить BindableProperty по имени свойства? - PullRequest
0 голосов
/ 12 февраля 2020

Привет, мне нужно получить BindableProperty по имени свойства. enter image description here

public BindableProperty GetBindableProperty(BindableObject bindableObj, string propertyName) {
    if(typeof(Entry) == bindableObj.GetType()) {
        if("Text" == propertyName) {
            return (Entry.TextProperty);
        }
        if("TextColor" == propertyName) {
            return (Entry.TextColorProperty);
        }
    }
    return (null);
}

Но я не хочу использовать этот стиль "если еще". Есть ли общий способ, которым мне не нужно судить о типе и имени?

1 Ответ

0 голосов
/ 14 февраля 2020

Привет, сейчас я нашел решение:

public BindableProperty GetBindableProperty(BindableObject bindableObj, string propertyName) {
    Type type = bindableObj.GetType();
    FieldInfo fieldInfo;
    while(null == (fieldInfo = type.GetField(propertyName + "Property", BindingFlags.Static | BindingFlags.Public))) {
        type = type.BaseType;
    }
    if(null == fieldInfo) {
        throw (new Exception("Can not find the BindableProperty for " + propertyName));
    }
    return ((BindableProperty)(fieldInfo.GetValue(bindableObj)));
}
...