2010-02-19 10 views
8

Mam blokadę tekstu, który jest powiązany z obiektem. Ten obiekt nadpisałem ToString, aby zwrócić kombinację 2 innych właściwości. Jak mogę powiadomić, że wartość ToString została zmieniona, gdy jedna z wartości właściwości została zaktualizowana?Powiązanie WPF - Powiadom Zmiana na wartość ToString

Niestety, nie mogę zmienić wiązania do wartości ToString, ponieważ jest ona w ramach kontroli zewnętrznej, więc naprawdę musi być w stanie powiadomić bezpośrednio.

Mam nadzieję, że definicja klasy poniżej wyjaśnić, co mam na myśli:

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

Odpowiedz

2

Zakładam, że kiedy kontrolka jest "wiążąca" z ToString(), to Twój obiekt jest używany jako Treść w ContentControl gdzieś wewnątrz niedostępnego kodu, który domyślnie tworzy TextBlock wyświetlający Wartość ToString (jeśli nie jesteś pewien, czy możesz dowiedzieć się o tym za pomocą Snoopa). W przypadku utworzenia globalnego DataTemplate wpisywanych dla danego typu osoby w Zasobów formantu można używać, aby wyświetlić inną nieruchomość, jak nowy własności fullname:

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

można dodać trzecią właściwość tylko do odczytu, która zwraca ToString() i wywołać OnPropertyChanged z nazwą tej właściwości

0

nie wiążą do ToString(). Zamiast tego wprowadź właściwość FullName i podnieś OnPropertyChanged("FullName") w obu innych ustawieniach właściwości.

+3

by to sensu z wyjątkiem (i zostawił ten szczegół się w oryginalnym wpisie, który teraz będę edytować), że powiązanie wartości ToString jest w ramach kontroli zewnętrznej, której nie mogę zmienić –

3

Jeśli nie chcesz dodawać specjalistycznej właściwości pełnej nazwy, powinieneś mieć możliwość używania StringFormat w swoim powiązaniu. Zobacz przykład MultiBinding w tym blog post. [Wymaga .NET 3.5 SP1]

Powiązane problemy