comment passer d'un entier comme ConverterParameter?
Je suis en train d'essayer de se lier à un nombre entier de propriété:
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter=0}" />
et mon convertisseur est:
[ValueConversion(typeof(int), typeof(bool))]
public class IntToBoolConverter : IValueConverter
{
public object Convert(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
}
}
le problème est que lorsque mon convertisseur est appelé le paramètre est une chaîne de caractère. j'ai besoin d'elle pour être un entier. bien sûr, je peux analyser la chaîne, mais dois-je?
merci pour toute aide
konstantin
- Quelqu'un sait comment obtenir ce sur plate-forme Windows Phone, où nous avons une syntaxe légèrement différente pour les liaisons? {PROPRIÉTÉ de liaison, Converter={StaticResource MYCONVERTER}, ConverterParameter=INT_VAL} dans cet exemple INT_VAL sera passé comme une chaîne de caractères
Vous devez vous connecter pour publier un commentaire.
Ici ya go!
L'astuce consiste à inclure l'espace de noms du système de base et d'écrire au moins le ConverterParameter de liaison à l'élément de formulaire.
IValueConverter.Convert()
s '"paramètre" paramètre estobject
. Vous avez encore de cast/analyser...Pour être complet, une solution possible (peut-être avec moins de frappe):
(Bien sûr,
Window
peut être remplacé parUserControl
, etIntZero
peut être défini plus proche de l'endroit de l'utilisation réelle.)Ne sais pas pourquoi
WPF
les gens ont tendance à être peu enclins à utiliser desMarkupExtension
. C'est la parfaite solution pour de nombreux problèmes, notamment le problème mentionné ici.Si cette extension de balisage est disponible dans
XAML
espace de noms 'm', puis l'affiche originale de l'exemple devient:Cela fonctionne parce que l'extension de balisage de l'analyseur peut voir le fort le type de l'argument du constructeur et de les convertir en conséquence, alors que la Liaison est ConverterParameter argument est (moins-informatif) de l'Objet saisi.
Value
unobject
plutôt queint
, pour éviter de boxe à chaque fois dansProvideValue
. (Et puis, faireprivate
d'éviter d'attribuer quelque chose d'illégal directement).ProvideValue
n'est appelée qu'une fois par extension de balisage instance, de sorte que la boxe ne doit avoir lieu qu'une fois de toute façon. Par ne pas le faire dans le constructeur, j'évite de boxe tout à fait siProvideValue
n'est jamais appelée. Pour la fabrication desValue
privé, cela permettrait d'éviter à l'aide de l'extension de balisage dansXAML
élément objet de la syntaxe: msdn.microsoft.com/en-us/library/...Binding.ConverterParameter
n'a pas de type spécifique (c'est juste unobject
) si l'analyseur ne sais pas ce que la conversion à appliquer, ainsi chaque littéral est juste traitée comme une chaîne.{m:Int32 Value=0}
pourrait fonctionner tout aussi bien.)Ne pas utiliser
value.Equals
. Utilisation:value.Equals
?Il serait agréable d'une certaine façon d'exprimer les informations de type pour la ConverterValue en XAML, mais je ne pense pas que c'est possible dès maintenant. Donc je suppose que vous devez analyser le Convertisseur opposer à votre type attendu par certains d'une logique personnalisée. Je ne vois pas une autre façon.