2010-02-19 28 views
8

Nesneye bağlı bir metin bloğum var. Bu nesne, diğer 2 özelliğin kombinasyonunu döndürmek için ToString'i geçersiz kıldım. Özellik değerlerinden biri güncellendiğinde ToString değerinin değiştirildiğini nasıl bildirebilirim?WPF Ciltleme - Bildir ToString değerine değiştir

Maalesef, bir üçüncü taraf denetiminde olduğu için ToString değerine bağlamayı değiştiremiyorum, bu nedenle doğrudan bildirimde bulunmanız gerekir.

Umarım aşağıda sınıf tanımı ne demek netleştirecek:

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

cevap

2

Denetimin ToString() öğesine "bağlama" olduğunu düşündüğünüzde, nesnenizin varsayılan olarak erişilemeyen bir kodun içinde ContentControl İçeriği olarak kullanıldığını, varsayılan olarak görüntülenen bir TextBlock oluşturan bir TextBlock oluşturduğunu varsayalım ToString değeri (Snoop ile bulabileceğinizden emin değilseniz). denetimin Resources daki Kişi türü için küresel yazılan DataTemplate oluşturursanız, yeni bir FullName özelliği gibi farklı bir özelliği görüntülemek için kullanabilirsiniz: Bu hariç mantıklıdır

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

Eğer ToString() döndürür üçüncü salt okunur özelliğini eklemek ve o mülke

0

yapmayın bağlamak adıyla OnPropertyChanged çağırabilir ToString(). Bunun yerine, FullName özelliğini tanıtın ve diğer özellik ayarlayıcılarınızda OnPropertyChanged("FullName")'u kaldırın.

+3

(ve ben bu ayrıntıyı göz bıraktın ToString değerindeki bağlamanın değiştiremediğim 3. taraf kontrolünde olduğunu şimdi değiştireceğim orijinal yayında) –

3

Tam ad için özel bir özellik eklemek istemiyorsanız, sizde StringFormat'ı bağlamanız gerekir. Bu blog post'daki MultiBinding örneğine bakın. [.NET 3.5 SP1 gerektirir]