将字符串属性绑定到对象
本文关键字:对象 绑定 属性 字符串 | 更新日期: 2023-09-27 18:18:59
假设我有一个类:
public class MyClass
{
public string Name;
public int Id;
public override string ToString()
{
return this.Id.ToString() + " - " + this.Name;
}
}
如果我将数据网格文本列绑定到该类的对象实例(不使用转换器),则调用覆盖的ToString并成功显示Id - Name。然而,当我将同一个对象绑定到TextBlock的Text属性时,ToString永远不会被调用,Text为空。我知道我可以使用转换器,但是我试图理解为什么绑定不像绑定到数据网格列时那样调用ToString。
Datagrid列绑定(Datagrid的项源是MyClass对象的集合):
<DataGridTextColumn Binding="{Binding .}" Header="Id - Name"/>
TextBlock绑定:
<TextBlock><Run Text="{Binding myClass, ElementName=UserControl}"/></TextBlock>
注意:如果我把myClass改成myClass。
如果绑定类型不匹配,WPF将对某些转换应用隐式转换器。转换为字符串可以通过调用ToString()来完成,就像在。net框架的其他地方隐式调用它一样。
TextBox的Text绑定默认是双向的,因此不能使用隐式转换器,因为字符串不能转换回MyClass类型。网格列中显示模板的绑定是单向的,因此可以使用隐式转换器。我可以想象,如果您通过单击将网格列置于编辑模式,则会得到绑定错误。