将字符串属性绑定到对象

本文关键字:对象 绑定 属性 字符串 | 更新日期: 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类型。网格列中显示模板的绑定是单向的,因此可以使用隐式转换器。我可以想象,如果您通过单击将网格列置于编辑模式,则会得到绑定错误。