C#如何通过Binding

时间:2016-07-04 11:30:24

标签: c# binding

我想通过绑定访问类成员,但没有任何UI或XAML代码。

class Foo {
    public int Value { get; set; }
}

class Bar {
    public Foo foo { get; set; }
}

Bar bar = new Bar() {
    foo = new Foo() {
        Value = 2
    }
}

Binding b = new System.Windows.Data.Binding("foo.Value");
b.Source = bar;

// Now I want a method which returns bar.foo.Value, would be like that:
int value = b.GET_VALUE(); // this method would return 2 

有这样的方法吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案,谢谢: How to get class members values having string of their names?

不需要Binding类:

public static class Extensions
{
    public static object GetPropertyValue(this object Obj, string PropertyName)
    {
        object Value = Obj;

        foreach (string Property in PropertyName.Split('.'))
        {
            if (Value == null)
                break;

            Value = Value.GetType().GetProperty(Property).GetValue(Value, null);
        }

        return Value;
    }
}

用法:

class Foo {
    public int Value { get; set; }
}

class Bar {
    public Foo foo { get; set; }
}

Bar bar = new Bar() {
    foo = new Foo() {
        Value = 2
    }
}

bar.GetPropertyValue("foo.Value"); // 2

bar.foo = null;
bar.GetPropertyValue("foo.Value"); // null