2010-02-19 125 views
8

我有一个绑定到对象的文本块。这个对象我重写了ToString以返回2个其他属性的组合。如何在更新其中一个属性值时通知ToString值已更改?WPF绑定 - 通知更改为ToString值

不幸的是,我不能改变绑定到ToString值,因为这是在第三方控件内,所以真的需要能够直接通知。

希望下面的类定义将澄清我的意思:

public class Person : INotifyPropertyChanged 
{ 
    private string firstname; 
    public string Firstname 
    { 
    get { return firstname; } 
    set 
    { 
     firstname = value; 
     OnPropertyChanged("Firstname"); 
    } 
    } 

    private string surname; 
    public string Surname 
    { 
    get { return surname; } 
    set 
    { 
     surname = value; 
     OnPropertyChanged("Surname"); 
    } 
    } 

    public override string ToString() 
    { 
    return string.Format("{0}, {1}", surname, firstname); 
    } 
} 

回答

2

我认为当你说控件与ToString()绑定时,你的对象被用作ContentControl上Content的内容,在默认情况下会创建一个TextBlock来显示ToString值(如果你不确定你可以用Snoop找到)。如果您在控制的资源为你的人物类型的全局类型化的DataTemplate你可以用它来显示不同的属性,像一个新的FullName属性:

<ThirdPartyControl.Resources> 
    <DataTemplate DataType="{x:Type data:Person}"> 
    <TextBlock Text="{Binding FullName}"/> 
    </DataTemplate> 
</ThirdPartyControl.Resources> 
3

您可以添加第三个只读属性,它返回ToString(),并调用OnPropertyChanged与财产

0

没有约束力的名字到ToString()。相反引入一个FullName属性并在其他属性设置器中提升OnPropertyChanged("FullName")

+3

这将使除了感觉(我没有离开这个细节了在我现在要编辑的原始文章中)ToString值的绑定是在我无法更改的第三方控件中 – 2010-02-19 12:28:58

3

如果您不想为全名添加专用属性,您应该可以在绑定中使用StringFormat。请参阅blog post中的MultiBinding示例。 [需要.NET 3.5 SP1]