刚刚发现了一些令我非常惊讶的事情。
XAML代码:
<Label Content="{Binding myParameter}"/>
<TextBox Text="{Binding myParameter}" />
myParameter是一个类的实例,其ToString()方法被覆盖:
public override string ToString()
{
Console.WriteLine("Displaying value: " + Name);
return Name;
}
渲染时: 标签调用ToString()并显示Name属性。 TextBox不显示任何内容
我可以解释一下原因吗?
答案 0 :(得分:2)
Content
应该是任何对象,这意味着将调用ToString()
。
Text
应该是String属性。如果Text
未绑定到String属性,则框架错误处理将启动并且不显示任何内容。
最佳做法是直接绑定到您希望显示的值,而不是父对象。在这种情况下,直接绑定到Name
属性。
答案 1 :(得分:2)
根据Textbox Documentation in MSDN TextBox.Text
属性类型为string
:
public string Text { get; set; }
并根据Label documentation in MSDN Label.Content
属性类型为object
:
public object Content { get; set; }
因此,为TextBox.Text
分配一些值不会调用您已覆盖的ToString()
方法,因为它已经是string
类型。 Label.Content
调用该方法,因为该对象正在转换为字符串。