WPF DataBinding avec une expression conditionnelle
Je suis en utilisant le pattern MVVM et mon datacontext de mon point de vue est la propriété du Client. Maintenant, je veux lier la propriété IsEnabled de ma zone de texte basé sur la valeur de la Clientèle.Code client de la propriété. Si il est supérieur à 0, alors il devrait être de permettre à d'autre de le désactiver.
Je comprends, je pourrais facilement ajouter un bool propriété dans le modèle de vue et de le lier à la propriété IsEnabled de ma zone de texte, mais ça semble être un overkill.
OriginalL'auteur MegaMind | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs options.
Tout d'abord, vous pouvez utiliser DataTrigger
Être conscient, s'il vous plaît, que la valeur de DataTrigger du setter pouvez remplacer uniquement la valeur définie dans le style setter. Si vous définissez la valeur directement puis déclencheur ne fonctionne pas.
La raison en est Propriété De Dépendance Priorité De La Valeur De.
DataTrigger
ne fonctionne qu'à la condition d'égalité, donc si vous avez besoin de vérifier à l'aide des nombres négatifs aswell, puis utiliser la deuxième option - Convertisseur De ValeursEh bien, vous pouvez essayer de créer un style avec beaucoup de différents déclencheurs. Puis bindig fonctionnera uniquement pour les déclencher. Une autre façon est de créer ValueConverter qui accepte l'ensemble de l'entité (Client ou d'un Employé) et l'utilisation appropriée de la propriété dans le code de retour de la valeur pour IsEnabled.
Merci, je comprends le concept de la Valeur convertisseur très bien, mais vous voulez faire la même chose en utilisant les données des déclencheurs. Ce que je suis capable de comprendre à partir de votre commentaire j'ai besoin de créer des déclencheurs différents pour les différents écrans, et à l'aide de leurs biens. Suis-je le comprendre correctement? N'avons-nous pas une certaine façon de faire de ce générique.
Oui, vous comprenez-moi bien, mais je vous conseille de vérifier les performances: la liaison n'aime pas insolubles chemins. Je ne peux pas vous parler de façon générique maintenant. Il semble qu'il n'est pas possible. Et je vous propose de réfléchir sur la testabilité. Vous voulez mettre un peu partie de la logique métier dans la Vue. Mais c'est surtout une logique de présentation, mais je préfère 'IsEnabled' bien dans mon ViewModel. J'ai peut ensuite introduire une logique plus complexe qui ne sera pas exprimable par DataTriggers.
OriginalL'auteur Pavel Voronin