2010-01-30 7 views
5

Nella mia applicazione WPF, ho una proprietà booleana che vorrei mostrare all'utente (ad esempio con una casella di controllo di sola lettura). Normalmente implementerei INotifyPropertyChanged in modo che WPF possa agire in tal senso e cambiare la casella di controllo di conseguenza.WPF: Mostra modifica proprietà senza l'implementazione dell'interfaccia INotifyPropertyChanged

Il problema che sto avendo ora è che questo valore di proprietà viene recuperato da un framework chiuso. Ciò significa che posso solo eseguire il polling del valore, ma non c'è alcun cambiamento, evento a cui posso iscrivermi.

Il mio primo pensiero è stato quello di creare un thread separato, che periodicamente (ad esempio ogni 10 millisecondi) esegue il polling del valore e crea un evento quando il valore è stato modificato. Ma mi sembra eccessivo.

Quindi la mia domanda è: esiste una funzionalità in WPF per la visualizzazione dei valori di modifica in cui INotifyPropertyChanged non è un'opzione? Una specie di meccanismo di voto, forse? Se no, come affronteresti questo problema?

Grazie per il vostro tempo.

+0

come è da un quadro chiuso io non credo che sia possibile. io non sono abbastanza sicuri di inviare che come una risposta. –

risposta

4

Se il valore viene da qualche parte non si può controllare, creare un "ViewModel" per l'oggetto in questione e gestire questo da soli.

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

Se ci sono molte proprietà puoi anche generare una classe wrapper completa per farti risparmiare tempo. – smaclell

+3

Infatti, 'ViewModelBase' contiene implementazioni di' INotifyPropertyChanging' e 'INotifyPropertyChanged'. – user7116

+0

Grazie per i tuoi post! Questa è davvero una brutta notizia. :-( Il problema che sto avendo con il tuo approccio è che il mio valore è cambiato dall'interno del framework chiuso, non da me Non sono in grado di modificarlo del tutto –

0

Sono d'accordo con @Alastair. Perché

(1) Si desidera recuperare il valore da un framework chiuso che non comunica all'utente le modifiche alle proprietà.
(2) È possibile eseguire il polling del valore, ma non si desidera farlo!

Non credo che ci sarà un altro modo di fare questo :(

+0

Perché scoraggiante polling? La proprietà è di sola lettura e cambia don' Ho bisogno di essere riflessa immediatamente, un breve ritardo va bene –

+0

@Max: non lo vedo come scoraggiante sondaggio. ng, è impossibile. L'unico modo per farlo è il polling. –

+0

OK, grazie per il tuo tempo. :-) Allora il sondaggio è ... –

Problemi correlati