2017-02-02 1 views
0

J'ai une application qui doit afficher beaucoup de valeurs dans différentes unités (pieds vs. mètres, degrés vs. radians, miles vs. kilomètres, etc.). Chaque valeur affichée doit avoir sa propre unité sélectionnable (pieds ou mètres). Ma première pensée est de créer un contrôle utilisateur avec juste une zone de texte pour l'affichage de la valeur et une zone de liste déroulante pour les unités disponibles. Mais, comment puis-je travailler la liaison de la zone de texte de sorte que l'unité de droite est affichée? Et, comment puis-je travailler la liaison de la zone de texte de sorte que si la valeur est modifiée, la valeur du type de modèle sous-jacent correct (pieds ou mètres) est stockée?Liaison WPF/affichage de différentes unités

MISE À JOUR:

Je fini par utiliser la MultConverter comme @Sledgehammer avait suggéré. J'ai ajouté une chaîne de format afin que le développeur puisse contrôler cela aussi.

Dans FeetToMetersMultiValueConverter: IMultiValueConverter

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double value = (double)values[0]; 
     FeetOrMetersSelectionType valueType = (FeetOrMetersSelectionType)values[1]; 
     FeetOrMetersSelectionType displayValueType = (FeetOrMetersSelectionType)values[2]; 
     string valueFormat = (string)values[3]; 

     if (valueType != displayValueType) 
     { 
      if (displayValueType == FeetOrMetersSelectionType.Meters) 
      { 
       value = value * 0.3048; 
      } 
      else 
      { 
       value = value/0.3048; 
      } 
     } 

     return value.ToString(valueFormat); 
    } 
+0

Encapsuler la mesure et l'unité dans un objet implémentant INPC. Lorsque l'appareil change, changez la mesure de manière appropriée. Tada. – Will

Répondre

2

Vous pouvez utiliser un MultiBinding sur la zone de texte. Passez le texte et les unités au MultiConverter et demandez-lui de faire les calculs et de renvoyer le texte.