2010-11-12 15 views
0

Si j'avais une étiquette sur une vue qui voulait que la largeur soit égale à la largeur de deux colonnes dans une de mes grilles sur la même vue, comment pourrais-je configurer relier sans utiliser de convertisseur? Dois-je utiliser des propriétés pour préformer mon calcul et stocker une valeur? Mon intention est que si la taille de la grille de la vue change, la taille de cette étiquette changera également pour correspondre à la nouvelle largeur des deux colonnes.wpf - lier les largeurs d'étiquette à la propriété de longueur calculée

Et où devrais-je mettre cette logique? J'essaie de suivre le modèle MVVM mais je vois que beaucoup de discussions sur les "convertisseurs dans MVVM" disent de mettre la logique dans le viewmodel.

J'ai essayé d'implémenter ce comportement avec des propriétés de dépendances sur ma vue puisque mon viewmodel n'a techniquement aucune connaissance de ma vue (alors comment mon viewmodel sait-il la largeur de mes colonnes actuellement?). Cela va à l'encontre de ce que j'ai lu en ligne. Lors de l'implémentation de ce comportement, j'ai remarqué que je ne peux pas référencer mes colonnes par nom, sauf si ma propriété n'est pas statique, mais les propriétés de dépendances sont statiques, donc je ne suis pas sûr de mélanger mes valeurs sans créer de propriétés supplémentaires.

Quelqu'un peut-il fournir de l'aide ici? J'ai l'impression de trop compliquer cela. J'ai juste besoin de cette étiquette pour m'asseoir sur ces deux colonnes, mais elles s'étirent. Il fournit simplement un regroupement visuel des champs connexes dans la grille. Une fois que je peux faire ce premier, les deux autres devraient être également similaires.

Répondre

1

Ma règle générale est de savoir si "View" est associé, alors éloignez-le du ViewModel. D'après votre description, cela semble être purement lié à la vue, donc j'utiliserais simplement la logique dans le codebehind ou un convertisseur.

Maintenant, ce que je ne comprends pas c'est pourquoi vous êtes réticent à utiliser des convertisseurs. Avec les convertisseurs, vous ne voulez certainement pas stocker de logique métier qui conduira à la confusion ou à des points douloureux pour le refactoring, mais si vous avez une valeur qui doit être convertie pour une opération d'affichage spécifique, alors les convertisseurs sont exactement ce que vous devriez utiliser. .

Donc, mon conseil est Convertisseurs ... si c'est Vue liée puis n'hésitez pas à utiliser Convertisseurs et Codebehind ... en fait, vous devrait les utiliser et non le ViewModel.

Cela aide-t-il?

+0

Je ne suis pas contre les convertisseurs. Je les ai utilisés dans certains de mes premiers trucs wpf. J'ai essayé de structurer mon approche d'application de wpf à plus d'une approche de mvvm-esque ainsi ma réticence à les employer est strictement basée sur les «bonnes pratiques» des choses que j'ai lues sur mvvm. Comme pour tout ce qui concerne mvvm, il y a autant d'arguments opposés qui expliquent pourquoi je devrais toujours les utiliser. Il semble que l'interprétation de mvvm par tout le monde a des limites de séparation différentes, ce qui me rend la tâche difficile à choisir pour un usage futur. – TWood

+0

J'ai fini par ne pas utiliser un convertisseur, mais quelques méthodes de rappel et de rappel qui ont fait mon calcul pour moi. J'ai tout mis dans la vue, car il était spécifique à la vue. Merci pour votre contribution Chris. – TWood

+0

Pas un problème ... vous avez fait le bon choix ... vous êtes allé avec ce qui se sent confortable pour vous. Je ne crois pas que quiconque devrait faire quelque chose juste parce que c'est «Best-Practice» et ensuite ils ne peuvent pas refactoriser ou comprendre plus tard. Évidemment, vous ne faites rien qui rende la vie difficile aux autres ni quelque chose qui empêche l'évolutivité ou n'est pas stable ... après cela, faites juste ce qui vous semble juste. Bonne chance –