Scott a une bonne réponse à la question réelle, mais c'est toujours une bonne idée de se demander "Comment pourrais-je besoin code comme cela dans le futur? Comment puis-je éviter creati Encore une autre classe et réutilise plutôt ce que j'ai déjà? ".
Voici une variante plus générale de la solution de Scott: -
public class EnumToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (Enum.GetName(value.GetType(), value).Equals(parameter))
return Visibility.Visible;
else
return Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
Xaml: -
<TopLevelWindowOrControl.Resources>
<local:EnumToVisibilityConverter x:Key="EnumToVisibilityConverter" />
</TopLevelWindowOrControl.Resources>
<Border Visibility="{Binding Path=BreakLvlProperty, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Fatal" />
Dans cette approche, nous pouvons convertisseur tout ENUM à une valeur de visibilité en utilisant le ConverterParameter
spécifier la valeur enum (sous forme de chaîne) qui constitue l'état "Visible".
Il est tentant d'aller plus loin pour permettre que plus d'une valeur d'énumération soit assimilée à "Visible". Cependant, actuellement, le code n'est pas beaucoup plus compliqué que la mise en œuvre plus spécifique de Scott. Par conséquent, cette amélioration devrait être laissée jusqu'au besoin.
C'est amusant comment des questions de nature similaire semblent arriver comme des bus. Voir ma réponse à une autre question très récente http://stackoverflow.com/questions/2787725/how-to-display-different-enum-icons-using-xaml-only/2789422#2789422 – AnthonyWJones