6
votes

Mettre à jour la liaison de la propriété statique

L'application est développée avec C # et WPF. J'ai une base de données sur une propriété statique d'une classe non statique. Lorsque l'application est démarrée, la liaison fonctionne bien, mais si je modifie le bool de la liaison, la vue n'est pas mise à jour. Comment puis-je mettre à jour la liaison de cette propriété statique? NotifyChanged-Evénements n'a pas affecté.

La classe: xxx

La vue: xxx


1 commentaires

Je ne comprends pas pourquoi cette classe est statique. Vous pouvez utiliser l'héritage ou la composition pour y combiner avec une classe de base de votre viewModel. Si vous faites cela, vous aurez que les CanresizecoLumns comme une propriété sur votre viewModel et utilisez avec succès surpropertychangned («Nom de propriété»)?


4 Réponses :


2
votes

Malheureusement, il n'y a pas d'équivalent direct au mécanisme de notification de inotifypropertychanged pour une propriété statique.

Il y a quelques options, notamment:

  1. Faites une propriété de niveau d'instance qui renvoie le membre statique. Utilisez un mécanisme personnalisé pour informer les instances de la modification, à quelle heure l'instance peut augmenter l'événement de la propriété . Cela peut devenir laid et introduire des fuites de mémoire si vous ne faites pas attention à vous désabonner ou à utiliser un motif d'événements faibles.
  2. Déplacez la propriété statique en singleton et placez-la comme membre d'instance de l'instance Singleton. Cela permet à cette instance d'augmenter de biens de propriété d'événements normaux.

2 commentaires

Il y a staticpropertychanged


@wobbles a été ajouté après cette réponse



2
votes

Vous pouvez soit implémenter les propriétés à l'aide d'un singleton sur laquelle la propriété n'est pas statique ou vous Il suffit également de le rendre non statique, mais vous créez simplement une instance dans l'instance par exemple (j'irais avec ce dernier). Dans les deux cas, vous pouvez mettre en œuvre inotifypropertychanged à nouveau.


0 commentaires

7
votes

Le seul moyen de faire est si vous avez une référence à la Bindingexpression .

En supposant que vous avez une référence au pouce de votre code, il ressemblerait à: xxx

Votre meilleur choix être d'utiliser un modèle singleton, comme: xxx

puis lié comme: xxx

alors vous avez simplement besoin de Soulevez l'événement INOTICYPROPERTYCHANGED.PROPERTYCHANGED lorsque vous modifiez des CanResizEcolumns.


0 commentaires

0
votes

Je pense que c'est une solution plus facile:

Propriété de la classe: xxx

xaml: xxx


0 commentaires