Скотт имеет хороший ответ на реальный вопрос, однако всегда полезно спросить себя: «Как мне может понадобиться код , такой как , в будущем? Как я могу избежать создания еще одного класса и вместо этого повторно использовать то, что у меня уже есть? ".
Вот более общий вариант решения Скотта: -
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" />
В этом подходе мы можем преобразовать любое перечисление в значение Visibility с помощью ConverterParameter
, чтобы указать значение перечисления (в виде строки), которое составляет состояние Visible.
Соблазнительно пойти дальше, чтобы позволить более чем одному значению перечисления быть равным «Видимым». Однако в настоящее время код не намного сложнее, чем более конкретная реализация Скотта. Следовательно, это улучшение следует оставить до тех пор, пока оно не понадобится.