Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Установка единого значения свойства объектам на форме WPF

#c_sharp #wpf



На форме WPF есть несколько TextBlock. Как программно по нажатию кнопки установить
у них всех к примеру свойство Visible в false?

    


Ответы

Ответ 1



Если вы пользуетесь MVVM (а чем ещё?), у вас не должно быть желания обработать все текстбоксы на странице — вы должны думать не в терминах контролов, а в терминах показываемых на странице сущностей. Тем более что визуальное представление любого из объектов может поменяться, TextBox может поменяться на другой контрол, а вам скорее всего хочется отключить видимость этого элемента, какого бы типа он ни был. Поэтому правильное решение — выставить в VM свойство наподобие IsVisible, и привязываться к нему. По команде из UI переключать на уровне бизнес-логики свойства IsVisible у нужных VM-объектов, и дать UI автоматически подхватить эти изменения. Альтернативное, более техническое решение наподобие изложенного в соседнем ответе: binding к свойству + общий стиль. (Я бы всё же советовал управлять на уровне VM.) Пример: True Edit mode Если нужно для некоторых 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); } } Ну и теперь можно подключить к коду. Один из многих способов: True Edit mode Или можно уложить это в два стиля, чтобы код был проще.

Ответ 2



Установка одинакового значения определенного свойства для нескольких элементов: К примеру, нам нужно скрыть несколько элементов по нажатию кнопки. Добавляем свойство: private static readonly DependencyProperty EditModeProperty= DependencyProperty.Register("EditMode", typeof(Visibility), typeof(MainWindow)); public Visibility EditMode { get { return (Visibility)this.GetValue(EditModeProperty); } set {this.SetValue(EditModeProperty, value);} } По нажатию кнопки прописываем следующее: private void Button_Click(object sender, RoutedEventArgs e) { EditMode = System.Windows.Visibility.Hidden; } Переходим к XAML:

Комментариев нет:

Отправить комментарий