2010-01-30 9 views
5

En mi aplicación WPF, tengo una propiedad booleana que me gustaría mostrar al usuario (por ejemplo, con una casilla de verificación de solo lectura). Normalmente implementaría INotifyPropertyChanged para que WPF pueda actuar sobre eso y cambie la casilla de verificación en consecuencia.WPF: Mostrar cambio de propiedad sin implementar la interfaz INotifyPropertyChanged

El problema que estoy teniendo ahora es que este valor de propiedad se recupera de un marco cerrado. Eso significa que solo puedo sondear el valor, pero no hay ningún evento de cambio al que pueda suscribirme.

Mi primer pensamiento fue crear un hilo separado, que periódicamente (digamos cada 10 milisegundos) sondea el valor y crea un evento cuando el valor ha cambiado. Pero eso me parece excesivo.

Así que mi pregunta es: ¿hay alguna función en WPF para mostrar los valores cambiantes donde INotifyPropertyChanged no es una opción? Algún tipo de mecanismo de encuesta, tal vez? Si no, ¿cómo abordarías este problema?

Gracias por su tiempo.

+0

como es de un marco cerrado que no creen que es posible. no soy lo suficientemente seguro para publicar esto como una respuesta. –

Respuesta

4

Si el valor proviene de algún lugar que no puede controlar, crear un "modelo de vista" para el objeto en cuestión y manejar eso mismo.

public class ClosedSourceObjectViewModel : ViewModelBase 
{ 
    private ClosedSourceObject ClosedSourceObject 
    { 
     get; 
     set; 
    } 

    public bool SomeProperty 
    { 
     get { return this.ClosedSourceObject.SomeProperty; } 
     set 
     { 
      if (value != this.ClosedSourceObject.SomeProperty) 
      { 
       RaisePropertyChanging("SomeProperty"); 
       this.ClosedSourceObject.SomeProperty = value; 
       RaisePropertyChanged("SomeProperty"); 
      } 
     } 
    } 
} 
+0

Si hay muchas propiedades, también podría generar una clase de contenedor completa para ahorrarle tiempo. – smaclell

+3

De hecho, tenga en cuenta que 'ViewModelBase' contiene implementaciones de' INotifyPropertyChanging' y 'INotifyPropertyChanged'. – user7116

+0

¡Gracias por sus publicaciones! Eso es realmente malas noticias. :-( El problema que tengo con su enfoque es que mi valor ha cambiado desde el marco cerrado, no por mí. No puedo cambiarlo en absoluto. –

0

Estoy de acuerdo con @Alastair. Porque

(1) Desea recuperar el valor de un marco cerrado que no le notifica sobre el cambio de propiedad.
(2) Puede sondear el valor, pero no desea hacer eso.

No creo que haya ningún otro modo de hacer esto :(

+0

¿Por qué desalentando de votación? La propiedad es de sólo lectura y cambia Don' Necesito que se refleje inmediatamente, una pequeña demora está bien. –

+0

@Max: No lo veo como una encuesta desalentadora. Está de acuerdo en que sin polli ng, es imposible. La única forma de hacerlo es mediante sondeo. –

+0

OK, gracias por su tiempo. :-) Luego sondear es ... –

Cuestiones relacionadas