将字符串属性绑定到对象

时间:2011-12-28 08:51:47

标签: c# wpf

说我有这样的课程:

public class MyClass
{
    public string Name;
    public int Id;

    public override string ToString()
    {
        return this.Id.ToString() + " - " + this.Name;
    }
}

如果我将datagrid文本列绑定到此类的对象实例(不使用转换器),则会调用重写的ToString并成功显示Id - Name。但是,当我将同一个对象绑定到TextBlock的Text属性时,永远不会调用ToString并且Text为空。我知道我可以使用转换器,但我试图理解为什么绑定不像我绑定到datagrid列时那样调用ToString。

Datagrid列绑定(datagrid的项源是MyClass对象的集合):

<DataGridTextColumn Binding="{Binding .}" Header="Id - Name"/>

TextBlock绑定:

<TextBlock><Run Text="{Binding myClass, ElementName=UserControl}"/></TextBlock>

注意:如果我将myClass更改为myClass.Name,则会成功显示Name属性。

1 个答案:

答案 0 :(得分:2)

如果绑定类型不匹配,WPF将对绑定应用隐式转换器进行某些转换。转换为字符串可以通过调用ToString()来完成,就像它在.Net框架的其他区域中隐式调用一样。

默认情况下,TextBox的Text绑定是双向的,因此无法使用隐式转换器,因为字符串无法转换回MyClass类型。网格列中显示模板的绑定是一种方式,因此可以使用隐式转换器。我想如果你通过点击它将网格列置于编辑模式,你会得到一个绑定错误。