2010-02-19 13 views
8

Ich habe einen Textblock, der an ein Objekt gebunden ist. Dieses Objekt Ich habe ToString überschrieben, um eine Kombination aus 2 anderen Eigenschaften zurückzugeben. Wie kann ich benachrichtigt werden, dass der ToString-Wert geändert wurde, wenn einer der Eigenschaftswerte aktualisiert wird?WPF-Bindung - Benachrichtigen Änderung an ToString Wert

Leider kann ich die Bindung an den ToString-Wert nicht ändern, da dies innerhalb eines Drittanbieter-Steuerelements ist, so dass Sie in der Lage sein müssen, direkt zu benachrichtigen.

Hoffentlich wird die Klassendefinition unten wird klären, was ich meine:

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); 
    } 
} 

Antwort

2

Ich nehme an, wenn Sie sagen, dass das Steuerelement an ToString() "binding" ist, wird Ihr Objekt als Content in ContentControl innerhalb des unzugänglichen Codes verwendet, der standardmäßig einen TextBlock erstellt, der das anzeigt ToString Wert (wenn Sie nicht sicher sind, können Sie mit Snoop herausfinden). Wenn Sie eine globale typisierte Datatemplate für Ihre Person Art in der Ressourcen der Steuerung erstellen können Sie verwenden, eine andere Eigenschaft anzuzeigen, wie eine neue Eigenschaft Fullname:

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

Sie können dritte schreibgeschützte Eigenschaft hinzuzufügen, die ToString() zurückgibt, und Do

0

OnPropertyChanged mit Namen dieser Eigenschaft nennen nicht binden zu ToString(). Stellen Sie stattdessen eine FullName-Eigenschaft ein und erhöhen Sie OnPropertyChanged("FullName") in beiden anderen Property Settern.

+3

Dieser Sinn machen würde, außer (und ich habe dieses Detail auslassen in dem ursprünglichen Post, den ich jetzt bearbeiten werde), dass die Bindung an den ToString-Wert innerhalb eines 3rd-Party-Steuerelements liegt, das ich nicht ändern kann –

3

Wenn Sie keine spezielle Eigenschaft für den vollständigen Namen hinzufügen möchten, sollten Sie StringFormat in Ihrer Bindung verwenden können. Siehe das MultiBinding-Beispiel in dieser blog post. [Benötigt .NET 3.5 SP1]

Verwandte Themen