10
votes

Puis-je modifier les propriétés d'une liaison dans un datrigrouter, sans connaître la liaison elle-même?

J'ai un STYLEXBOX style qui formate un numéro si la case est coudée, mais laisse le nombre non formaté en whlie, il est édité.

C'est le style que je veux pour plusieurs boîtes de texte, mais Ils contiennent tous des liaisons de texte différentes. La seule différence entre le Settre de texte régulier et le Settre de texte déclenché est que le déclencheur est que celui déclenché a strongformat = n2 dans la liaison.

est là une façon de faire ce style générique , tels que la modification de la propriété strongformat de la liaison dans le Datatrigège? xxx


2 commentaires

Je pense qu'il n'est pas possible de changer de propriétés d'une contraignante après avoir été appliquée. Au moins lorsque j'essaie de changer la propriété StringFormat d'une liaison existante, je reçois une invalidoPerationException disant que la liaison ne peut pas être modifiée après avoir été utilisée. Pour moi, il semble qu'il n'y aient aucun moyen de créer une nouvelle liaison chaque fois que la mise au point change.


Pensé à ce sujet, et considéré comme une solution de propriété de données ci-jointe dans laquelle le gestionnaire de changement de propriété attacherait des manutentionnaires GotFocus / LostFocus, etc. À la fin, je préfère avoir une zone de texte dérivée avec des propriétés Data et StringFormat , qui définirait la propriété texte en fonction de leurs valeurs et de l'état de mise au point actuel.


5 Réponses :


0
votes

Je me demande si vous pouviez peut-être avoir une propriété attachée sur les modifications pour contenir la valeur formatée (juste liée à la valeur d'édition réelle avec une application StringFormat), puis dans votre déclencheur hors de mise au point, vous pouvez définir la valeur d'édition. à cette propriété.

Cela entraînerait une liaison circulaire cependant, lorsque la modification n'a pas de concentration, car le WPF réagit dans de telles situations.


0 commentaires

0
votes

Malheureusement, c'est (à ma connaissance) pas possible. Une solution de contournement possible créerait de manière programmative un tel style à la volée, qui pourrait être encapsulée dans un markupextension qui prend le chemin comme paramètre constructeur.


0 commentaires

2
votes

La seule option que je vois qu'il y aurait de créer une propriété attachée pour le StringFormat et d'utiliser un multibelling.

Pas tout à fait ce que tu voulais, mais assez proche, je suppose ...

Vous avez plus d'informations sur cette question (type de duplicata) sur S.O.:

Modification des paramètres d'une liaison de texte d'une zone de texte via l'utilisation d'un style


0 commentaires

3
votes

Y a-t-il une façon de faire ce style générique, tel que changer la propriété StringFormat de la liaison dans le Datatriggigrigght?

hériter style et nouvelle xaml deviendrait ceci: xxx

voici la classe ... xxx

Notez que mon test était

  • le Generic MainWindow
  • Impl inotifyPropertychangned
  • Quelquevalue propriété INPC
  • DataContext = Ceci
  • x: nom = ceci

3 commentaires

Je préférerais laisser mon style dans le XAML où je peux facilement y accéder pour y apporter des modifications. Cela ressemble à un cauchemar pour entretenir :)


Ceci est le style que je souhaite pour plusieurs boîtes de texte numérique, mais ils contiennent tous des liaisons de texte différentes ont fait valoir que cela vaut la peine. En tout état de cause, le lien de la réponse de David propose presque le même algorithme.


+1 pour une version de travail, bien que je préfère la propriété attachée indiquée dans le lien de David, car cela me permet de garder le reste de mon style dans le XAML



2
votes

Ma tentative de résoudre ceci a pris fin avec un contrôle personnalisé plus une multi-liaison, des deux qui suggéraient ci-dessus.

Cela m'a permis d'utiliser le balisage comme celui-ci:

J'ai essayé de poster mon code mais je continue à obtenir une erreur sur "Code qui n'est pas correctement formaté en tant que code".


0 commentaires