绑定Label和TextBox(XAML)时的区别

时间:2016-08-29 08:40:34

标签: c# wpf xaml

刚刚发现了一些令我非常惊讶的事情。

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不显示任何内容

我可以解释一下原因吗?

2 个答案:

答案 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调用该方法,因为该对象正在转换为字符串。