Как сделать свойство IsEnabled кнопки зависимым от наличия данных в других элементах управления? (WPF) - PullRequest
1 голос
/ 24 октября 2008

У меня есть кнопка «Войти», которую я хочу отключить, пока 3 текстовых поля в одной и той же форме WPF не заполнятся текстом (пользователь, пароль, сервер).

У меня есть объект поддержки с логическим свойством IsLoginEnabled, которое возвращает True, если и только если все 3 элемента управления имеют данные. Однако когда я должен проверять это свойство? Должно ли оно быть в событии LostFocus каждого из 3 зависимых элементов управления?

Спасибо!

vg1890

Ответы [ 4 ]

1 голос
/ 24 октября 2008

Я бы получил "объект поддержки", чтобы вызвать измененное событие IsLoginEnabled при обновлении любого из 3 полей. Затем вы можете привязать кнопку к свойству IsLoginEnabled и больше не проверять ее.

Псевдокод будет выглядеть примерно так:

Public Event IsLoginEnabledChanged As EventHandler

Public Property User() As String
Get..   ' snipped for brevity
Set(ByVal value As String)
   mUser = value
   RaiseEvent IsLoginEnabledChanged(Me, New EventArgs())
End Set

' do the same in the Set for Password() and Server() properties

Хитрость в этом заключается в присвоении имени событию [PropertyName]Changed (т.е. IsLogonEnabledChanged) - потому что повышение этого события автоматически уведомит любые связанные элементы управления: o)

0 голосов
/ 24 октября 2008

Я думаю, вы могли бы использовать RoutedCommands , одну из самых полезных функций WPF. В основном добавьте CommandBinding , чтобы использовать OnExecute и OnQueryCommandEnabled для управления состоянием кнопки.

Ознакомьтесь с этим замечательным объяснением использования RoutedCommands в WPF

0 голосов
/ 24 октября 2008

Можете ли вы просто привязать ваше IsLoginEnabled прямо к свойству Enabled кнопки входа в систему?

0 голосов
/ 24 октября 2008

Да, я бы сказал, что самым простым вариантом было бы проверить его на событие LostFocus или TextChanged каждого из этих элементов управления. Однако, если вы хотите сделать более тяжелую работу, вы можете реализовать логическое значение как свойство зависимости, которое вы могли бы привязать к кнопке Enable. http://msdn.microsoft.com/en-us/library/ms750428.aspx

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