重新声明具有不同类型的属性会导致绑定问题

时间:2015-12-12 19:07:04

标签: c# xaml data-binding

在C#中,有可能在不同类型的派生类中重新声明属性。从我尝试过它起作用,但是如果我们使用绑定,我们将得到 BindingException - 程序期望基类的类型不是派生类。示例可能如下所示 - XAML:

<TextBlock Text="{Binding Name}" FontSize="24"/>

代码背后:

public class BaseClass
{
    public string Name { get { return 8.ToString(); } }
}

public class DerivedClass : BaseClass
{
    public new int Name { get { return 6; } }
}

public MainPage()
{
    this.InitializeComponent();
    DerivedClass myClass = new DerivedClass();
    Debug.WriteLine($"Name = {myClass.Name}");
    DataContext = myClass;
}

如果我们运行它,我们将看到Name = 6但我们将得到绑定异常(期望string并获取int)。

XAML绑定是否需要基类类型的类型?

1 个答案:

答案 0 :(得分:1)

由于Henk Holterman posted in comment DataBinding 使用反射来获取属性名称 - 您可以找到更多信息at MSDN。如果我们使用新类型在派生类中隐藏属性,则反射返回两种类型。

PropertyInfo[] info = myClass.GetType().GetProperties().ToArray();

从我尝试过的情况来看,当具有相同名称的属性中有多个类型时, BindingExpression 将抛出异常。