Сделать кнопку включенной / отключенной в зависимости от свойства TextBox Text в WPF? - PullRequest
13 голосов
/ 24 июня 2011

Я искал код через Google, который включает и отключает кнопку на основе свойства текста из текстового поля.Если в текстовом поле есть какой-то текст, то кнопка должна быть включена, либо кнопка должна быть отключена.

Я получил некоторый код, но код в xaml, но не на c #.Я не могу понять, как это работает.

Пожалуйста, помогите мне понять поведение следующего кода:

<TextBox Name="txtName" Width="100" Height="30"></TextBox>

<Button Content="Add Name " Width="100" Height="30" 
  IsEnabled="{Binding ElementName=txtName, Path=Text.Length, Mode=OneWay}"/>

Как работает свойство кнопки IsEnabled?Как true и false установлены для свойства IsEnabled?Что такое путь?Как это работает?

Ответы [ 5 ]

7 голосов
/ 24 июня 2011

В этой статье и статье объясняется привязка данных WPF и порядок работы путей.

Но приведенная выше привязка будет следить за изменением свойства Text в TextBox. Затем он будет наблюдать свойство Length для значения, возвращенного из свойства Text, которое является строкой. Значение свойства Length передается свойству IsEnbled.

Значение также необходимо преобразовать, так как вы присваиваете Int32 (свойство Length) логическому значению (свойство IsEnabled). Обычно это делается с помощью преобразователей типов, поэтому вышесказанное работает (что меня удивляет).

UPDATE:

Первая ссылка выше больше не работает, так как статьи MSDN Magazine старше 2008 года больше не доступны в Интернете. Они доступны в виде файлов CHM. Ссылка CHM для связанной статьи под названием «Точки данных: привязка данных в WPF»:

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazine2007_12en-us.chm

Из MSDN:

2008 и более ранние выпуски доступны только в виде файлов .chm. В большинстве версий Windows вы должны сначала сохранить эти файлы на локальном компьютере, а затем разблокировать файл, чтобы прочитать его. Чтобы разблокировать файл, щелкните его правой кнопкой мыши и выберите «Свойства», а затем нажмите кнопку «Разблокировать». Содержимое будет доступно для чтения.

3 голосов
/ 24 июня 2011

См. в этом посте для примера того, как отключить Button на основе TextBox контента.

Хотя этот подход будет работать, лучше использовать ICommand.

В ответ на комментарии

ElementName = имя элемента управления в XAML, к которому мы привязаны.Поэтому приведенный ниже пример будет {Binding ElementName=aName}

<TextBox x:Name="aName" />

Path = путь свойства значения, которое вы хотите для этого элемента.Например, если вы хотите получить значение свойства Text, вы должны использовать {Binding Path=Text}.Если вы хотите получить длину свойства Text, вы используете {Binding Path.Text.Length} и т. Д.

Mode=OneWay = направление, в котором оценивается привязка.Это объясняется здесь

1 голос
/ 24 июня 2011

это новый синтаксис привязки в WPF (xaml).

  1. Вы привязываетесь к элементу управления textBox txtName
  2. . Вы используете Path, чтобы указать, к какому свойствуэлемент, к которому вы пытаетесь привязаться.в этом случае вы привязываетесь к свойству TextBox, а затем к свойству Text.

Итак, когда текстовое поле пусто.TextBox.Text.Length = 0, что означает, что оно будет отключено.

, как только вы введете любое значение, оно станет> = 0, что переведено в true.

я настоятельно рекомендую прочитатьо привязке в WPF, прежде чем пытаться кодировать.В WPF он сильно отличается от WinForm

1 голос
/ 24 июня 2011

Если вы не хотите использовать MVVM / привязку данных, вы можете:

  1. Вы можете добавить DataTrigger к стилю TextBox и отключить / включить кнопку там.

  2. Или свяжите свойство IsEnabled кнопки со свойством Text в TextBox и используйте преобразователь значений, чтобы превратить длину строки в логическое значение.

1 голос
/ 24 июня 2011

Добавьте свойство к вашей модели представления, которое вычисляет значение для IsEnabled и привязывается к нему.

В установщике свойства, с которым вы связали значение TextBox.Text, вы также инициируете измененное событие для свойства IsEnabled.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...