2010-01-30 3 views
5

Dans mon application WPF, j'ai une propriété booléenne que je voudrais montrer à l'utilisateur (par exemple avec une case à cocher en lecture seule). Normalement j'implémenterais INotifyPropertyChanged afin que WPF puisse agir sur cela et changer la case à cocher en conséquence.WPF: Afficher les changements de propriétés sans implémenter l'interface INotifyPropertyChanged

Le problème que j'ai en ce moment est que cette valeur de propriété est extraite d'une structure fermée. Cela signifie que je peux seulement interroger la valeur, mais il n'y a pas de changement auquel je puisse m'abonner. Ma première pensée était de créer un thread séparé, qui interroge périodiquement (disons toutes les 10 millisecondes) la valeur et crée un événement lorsque la valeur a changé. Mais cela me semble trop compliqué. Donc, ma question est: Y at-il une fonctionnalité dans WPF pour afficher des valeurs changeantes où INotifyPropertyChanged n'est pas une option? Une sorte de mécanisme de sondage, peut-être? Si non, comment aborderiez-vous ce problème?

Merci pour votre temps.

+0

comme il est d'un cadre fermé, je ne crois pas que ce soit possible. Je ne suis pas assez sûr d'afficher que comme une réponse. –

Répondre

4

Si la valeur provient de quelque part, vous ne pouvez pas contrôler, créer un « ViewModel » pour l'objet en question et de gérer vous-même.

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

S'il y a beaucoup de propriétés, vous pouvez également générer une classe wrapper complète pour gagner du temps. – smaclell

+3

En effet, note 'ViewModelBase' contient des implémentations de' INotifyPropertyChanging' et 'INotifyPropertyChanged'. – user7116

+0

Merci pour vos messages! C'est effectivement une mauvaise nouvelle. :-( Le problème que j'ai avec votre approche est que ma valeur est changée à l'intérieur du cadre fermé, pas par moi, je ne suis pas capable de le changer du tout –

0

Je suis d'accord avec @Alastair. Parce que

(1) Vous voulez récupérer la valeur d'un cadre fermé qui ne vous informe pas de changement de propriété.
(2) Vous pouvez interroger la valeur, mais vous ne voulez pas faire cela!

Je ne pense pas qu'il y aura une autre façon de le faire :(

+0

Pourquoi la propriété est en lecture seule et change découragez vote vous? n » Il est nécessaire de se refléter immédiatement, un court délai est bon –

+0

@Max: Je ne vois pas cela comme un vote décourageant. ng, c'est impossible. La seule façon de le faire est d'interroger. –

+0

OK, merci pour votre temps. :-) Ensuite, il est sondage ... –

Questions connexes