На форме WPF есть несколько TextBlock. Как программно по нажатию кнопки установить у них всех к примеру свойство Visible в false?
Ответ
Если вы пользуетесь MVVM (а чем ещё?), у вас не должно быть желания обработать все текстбоксы на странице — вы должны думать не в терминах контролов, а в терминах показываемых на странице сущностей. Тем более что визуальное представление любого из объектов может поменяться, TextBox может поменяться на другой контрол, а вам скорее всего хочется отключить видимость этого элемента, какого бы типа он ни был.
Поэтому правильное решение — выставить в VM свойство наподобие IsVisible, и привязываться к нему. По команде из UI переключать на уровне бизнес-логики свойства IsVisible у нужных VM-объектов, и дать UI автоматически подхватить эти изменения.
Альтернативное, более техническое решение наподобие изложенного в соседнем ответе: binding к свойству + общий стиль. (Я бы всё же советовал управлять на уровне VM.)
Пример:
Если нужно для некоторых TextBox'ов включать, а для других выключать видимость по «общему» сигналу, придётся создать свой конвертер. Это совсем не сложно:
public class BooleanToVisibilityInvertedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return ((bool)value) ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
return object.Equals(value, Visibility.Collapsed);
}
}
Ну и теперь можно подключить к коду. Один из многих способов:
Или можно уложить это в два стиля, чтобы код был проще.
Комментариев нет:
Отправить комментарий