J’ai un enum comme ceci :
J’ai obtenu une propriété dans mon DataContext :
Et j’ai eu trois cases d’option dans mon client de WPF.
Maintenant comment lier les cases d’option à la propriété pour two-way-liaison correcte ?
J’ai un enum comme ceci :
J’ai obtenu une propriété dans mon DataContext :
Et j’ai eu trois cases d’option dans mon client de WPF.
Maintenant comment lier les cases d’option à la propriété pour two-way-liaison correcte ?
Vous pouvez poursuivre la simplification de la accepté de répondre. Au lieu de taper les énumérations comme des chaînes de caractères dans le code xaml et faire plus de travail dans votre convertisseur de besoin, vous pouvez transmettre explicitement dans la valeur d'enum au lieu d'une représentation de chaîne, et que CrimsonX commenté, les erreurs jeté au moment de la compilation plutôt que de l'exécution:
<StackPanel>
<StackPanel.Resources>
<local:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
</StackPanel.Resources>
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" />
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" />
</StackPanel>
Puis simplifier du convertisseur:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
En xaml, si les boutons radio partager le même conteneur parent, puis en sélectionnant l'une de sélectionner tous les autres dans ce conteneur (même s'ils sont liés à une propriété différente). Donc, essayez de garder votre du composant RadioButton qui sont liés à une propriété commune regroupées au sein de leur propre conteneur comme une pile du panneau. Dans le cas où vos composants radiobutton ne peut pas partager un seul conteneur parent, puis définissez la propriété GroupName de chaque composant RadioButton à une valeur commune pour regrouper logiquement.
Si votre type enum est imbriquée dans une classe (plutôt que directement dans l'espace), vous pourriez être en mesure d'utiliser le " + " de la syntaxe pour accéder à l'enum dans le code XAML comme indiqué dans un (non marqués) réponse à la question de l'Impossibilité à trouver un type enum statique de référence en WPF:
ConverterParameter={x:Static locale:YourClass+YourNestedEnumType.Enum1}
En raison de ce Microsoft Connect Question, toutefois, le concepteur dans VS2010 n'aura plus la charge en déclarant "Type 'local:YourClass+YourNestedEnumType' was not found."
, mais le projet n'a compiler et exécuter avec succès. Bien sûr, vous pouvez éviter ce problème si vous êtes en mesure de déplacer votre type enum à l'espace de noms directement.
Grâce à anon pour suggérer le retour de Liaison.Ne rien faire plutôt que de DependencyProperty.UnsetValue.
Simplifié ConvertBack de l'if-else pour utiliser un Opérateur Ternaire.
Si vous utilisez le protocole Enum drapeaux, le convertisseur devrait être comme suit:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Enum)value).HasFlag((Enum)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
Pour le EnumToBooleanConverter réponse: Au lieu de retourner DependencyProperty.UnsetValue envisager un retour de la Liaison.Ne rien faire pour le cas où le bouton radio IsChecked valeur est false. L'ancien indique un problème (et peut afficher à l'utilisateur un rectangle rouge ou similaire validation des indicateurs) tandis que le second indique simplement que rien ne devrait être fait, qui est ce qui est voulu dans ce cas.
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.convertback.aspx http://msdn.microsoft.com/en-us/library/system.windows.data.binding.donothing.aspx
J’utiliser les cases d’option dans un contrôle ListBox et puis lier à SelectedValue.
Il s’agit d’un vieux filet sur ce sujet, mais l’idée de base devrait être la même : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/323d067a-efef-4c9f-8d99-fecf45522395/
Aussi vous pouvez créer un contrôle personnalisé et que vous n’aurez pas besoin d’écrire beaucoup de code chaque fois à des fins générales Enum contrôle radio button
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.