如何使按钮的 IsEnabled 属性依赖于其他控件中是否存在数据?(WPF)



我有一个"登录"按钮,我想禁用该按钮,直到同一 WPF 表单上的 3 个文本框填充文本(用户、密码、服务器)。

我有一个支持对象,其中包含一个名为 IsLoginEnabled 的布尔属性,当且仅当所有 3 个控件都有数据时,它才返回 True。 但是,我应该什么时候检查此属性? 它应该在 3 个依赖控件中的每一个的 LostFocus 事件上吗?

谢谢!

VG1890

我会让"支持对象"在更新 3 个字段中的任何字段时引发IsLoginEnabled更改事件。然后,可以将按钮绑定到 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)

是的,我会说最简单的选择是在每个控件的 LostFocus 或 TextChanged 事件上检查它。 但是,如果要执行稍微重的提升,可以将布尔值实现为依赖项属性,该属性可以绑定到按钮的 Enable。http://msdn.microsoft.com/en-us/library/ms750428.aspx

你能把

你的IsLoginEnabled权限数据绑定到登录按钮的Enabled属性吗?

我认为您可以使用RoutedCommands这是WPF最有用的功能之一。基本上添加一个 CommandBinding,以使用 OnExecuteOnQueryCommandEnabled 来管理按钮的启用状态。

查看有关在 WPF 中使用路由命令的精彩解释

最新更新