En principe, j'ai développé un moyen astucieux de lier les RadioButtons à presque n'importe quoi :
/// <summary>Converts an value to 'true' if it matches the 'To' property.</summary>
/// <example>
/// <RadioButton IsChecked="{Binding VersionString, Converter={local:TrueWhenEqual To='1.0'}}"/>
/// </example>
public class TrueWhenEqual : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object To { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return object.Equals(value, To);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value) return To;
throw new NotSupportedException();
}
}
Par exemple, vous pouvez l'utiliser pour lier des boutons radio à une propriété de type chaîne de caractères comme suit (il s'agit d'un bogue bien connu selon lequel vous devez utiliser un nom de groupe unique pour chaque bouton radio) :
<RadioButton GroupName="G1" Content="Cat"
IsChecked="{Binding Animal, Converter={local:TrueWhenEqual To='CAT'}}"/>
<RadioButton GroupName="G2" Content="Dog"
IsChecked="{Binding Animal, Converter={local:TrueWhenEqual To='DOG'}}"/>
<RadioButton GroupName="G3" Content="Horse"
IsChecked="{Binding Animal, Converter={local:TrueWhenEqual To='HORSE'}}"/>
Maintenant, je voudrais utiliser public static readonly
objets appelés Filter1
y Filter2
comme valeurs de mes RadioButtons. J'ai donc essayé :
<RadioButton GroupName="F1" Content="Filter Number One"
IsChecked="{Binding Filter, Converter={local:TrueWhenEqual To='{x:Static local:ViewModelClass.Filter1}'}}"/>
<RadioButton GroupName="F2" Content="Filter Number Two"
IsChecked="{Binding Filter, Converter={local:TrueWhenEqual To='{x:Static local:ViewModelClass.Filter2}'}}"/>
Mais cela me donne une erreur :
Propriété inconnue 'To' pour le type 'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension' rencontrée lors de l'analyse d'une Markup Extension.
L'erreur se produit toujours si je supprime les guillemets. Qu'est-ce qui ne va pas ?