2010-02-19 8 views
8

Tengo un bloque de texto que está vinculado a un objeto. Este objeto he reemplazado ToString para devolver una combinación de otras 2 propiedades. ¿Cómo puedo notificar que se ha cambiado el valor de ToString cuando se actualiza uno de los valores de las propiedades?Enlazado de WPF - Notificar cambio al valor de ToString

Lamentablemente no puedo cambiar el enlace al valor de ToString ya que está dentro de un control de terceros, por lo que realmente necesito poder notificarlo directamente.

Con suerte la definición de clase a continuación aclarará lo que quiero decir:

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

Respuesta

2

Supongo que cuando dice que el control "vincula" a ToString() que su objeto se está utilizando como Content en ContentControl en algún lugar dentro del código inaccesible que crea un TextBlock que muestra el Valor de ToString (si no está seguro de que puede averiguarlo con Snoop). Si crea un DataTemplate mecanografiada global para el tipo de persona en Recursos del control se puede utilizar eso para mostrar una propiedad diferente, como una nueva propiedad FullName:

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

puede agregar tercera propiedad de sólo lectura, que devuelve ToString(), y llamar a OnPropertyChanged con el nombre de esa propiedad

0

no se unen a ToString(). En su lugar, introduzca una propiedad FullName y suba OnPropertyChanged("FullName") en sus otros grupos de propiedades.

+3

Esto tendría sentido, excepto (y no dejar este detalle a cabo en la publicación original que ahora editaré) que el enlace en el valor de ToString está dentro de un control de terceros que no puedo cambiar –

3

Si no desea agregar una propiedad especializada para el nombre completo, debería poder utilizar StringFormat en su enlace. Consulte el ejemplo de vinculación múltiple en este blog post. [Requiere .NET 3.5 SP1]

Cuestiones relacionadas