Подтвердить что ты не робот

Кнопка "Сделать" включена/отключена в зависимости от свойства TextBox Text в WPF?

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

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

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

<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? Что такое Путь? Как это работает?

4b9b3361

Ответ 1

Эта статья статья и статья объясняет привязки данных 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 файлы. В большинстве версий окон вы должны сначала сохранить эти файлы на свой локальный компьютер, а затем разблокировать файл, чтобы его прочитать. Чтобы разблокировать файл, щелкните его правой кнопкой мыши и выберите свойства, а затем нажмите кнопку "разблокировать". Содержимое будет доступно для чтения.

Ответ 2

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

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

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

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

<TextBox x:Name="aName" />

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

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

Ответ 3

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

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

Ответ 4

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

  • Вы можете добавить DataTrigger в стиль TextBox и отключить/включить его.

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

Ответ 5

это новый синтаксис Binding в WPF (xaml).

  • Вы привязываетесь к txtName TextBox control/element
  • Вы используете Path для указания того, какое свойство элемента u r пытается связать. в этом случае вы привязываетесь к свойству TextBox Text, а затем к атрибуту Text Length.

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

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

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