Pour un nouveau projet, il m'a récemment été demandé d'étudier une méthode de liaison des informations relatives au rendu de l'interface utilisateur aux objets métier dans une application WPF. Par exemple, une classe de rapport:Définition des propriétés de l'interface utilisateur à l'aide des attributs
class ExecutionReport
{
[Displayable(Bold, Background=Color.Red)]
public String OrderId{get; private set;}
[Displayable(Normal, HAlignment=Center)]
public String Symbol {get; private set;}
// this should be hidden as it doesn't have DisplayableAttribute
public String ClientOrderId {get; private set;}]
[Displayable(Normal, HAlignment=Right,
Format("If [Position] < 0 then Background=Color.Red"),
Format("If [Position] > 0 then Background=Color.Lime"),
DisplayFormat("+#;-#;0")]
public Int Position {get; private set;}
}
Ceci est une toute nouvelle approche pour moi comme généralement dans la plupart WPF applications MVVM j'ai travaillé là-bas a été une séparation claire de la vue et viewmodel et je cherche autant que possible pour garder les détails spécifiques à l'interface utilisateur hors de la machine virtuelle. Au lieu de cela je pencherais vers l'écriture de ceci en utilisant des dictionnaires de ressources et des convertisseurs simples appliqués sur les liaisons dans la couche de vue. Mes questions sont les suivantes: Y a-t-il des frameworks wpf/mvvm qui utilisent ce type d'implémentation? Si oui, je suis curieux de voir comment cela serait réalisé.
Y a-t-il des pièges évidents? Les premières choses couple qui me viennent à l'esprit sont
notification du changement (ie. INotifyPropertyChanged pour déclencher une mise à jour de la vue). Est-ce que la mise en œuvre de cette mesure serait beaucoup plus difficile maintenant?
Difficulté à tirer parti des dictionnaires de ressources pour les valeurs à l'échelle du système. Par exemple, peut-être que je voulais changer la couleur du rouge utilisé dans toute l'application. Je dois ctrl + f à travers et trouver tous les lieux dans les objets d'affaires où il a été utilisé et le changer au lieu d'être en mesure de modifier un seul StaticResource
Incapacité à tirer parti DesignTime DataContexts
Performance. Semble aime cela nécessiterait une utilisation intensive de réflexion qui pourrait ne pas être aussi performant que les convertisseurs de valeur typique
Je suis très curieux de voir si je ne me trompe pas sur les deuxième et troisième points ou si ces deux choses pourrait encore être atteint? En fin de compte, je pense que c'est un mauvais design et je suis penché vers l'écriture d'une implémentation différente pour montrer à la partie intéressée comment j'aborderais ce type de problème. Je veux juste m'assurer que je ne manque pas quelque chose d'évident qui pourrait le rendre plus élégant.
est-ce que AOP prend en charge le débogage ou sont-ils tous tissés après la compilation? – AwkwardCoder
@AwkwardCoder semble que vous pouvez le faire: http://doc.postsharp.net/debugging – fex