绑定标签和文本框(XAML)时的区别

本文关键字:区别 XAML 标签 文本 绑定 | 更新日期: 2023-09-27 18:04:24

刚发现一件让我很惊讶的事。

XAML代码:

  <Label  Content="{Binding myParameter}"/>
  <TextBox Text="{Binding myParameter}" />

myParameter是ToString()方法被重写的类的实例:

public override string ToString()
{
    Console.WriteLine("Displaying value: " + Name);
    return Name;
}

当呈现:标签调用ToString()并显示Name属性。文本框不显示任何内容

我能得到一些解释吗?

绑定标签和文本框(XAML)时的区别

Content是任何对象,这意味着ToString()将被调用。

Text应该是一个String属性。如果Text没有绑定到String属性,那么框架错误处理将启动并且它不显示任何内容。

最佳实践是直接绑定到您希望显示的值,而不是父对象。在本例中,直接绑定到Name属性。

根据MSDN中的文本框文档TextBox.Text属性类型为string:

public string Text { get; set; }

并且根据MSDN中的标签文档Label.Content属性类型为object:

public object Content { get; set; }

因此,给TextBox.Text赋值将不会调用您已经覆盖的ToString()方法,因为它已经是string类型。Label.Content调用该方法,因为对象正在被转换为字符串。