Bind Button.IsEnable用XAML进行自定义验证?

时间:2009-11-14 17:00:07

标签: wpf validation xaml multibinding

对不起,我不知道如何更好地标题我的问题,如果你有一个好的1,你可以说出来。

我有一个实体Contact。 此人具有导航属性:AddressPhonesPhone的集合)。

它们都实现了一个公开属性IsValid的自定义接口。

在联系编辑表单中,我有一个确定按钮,我希望它的IsEnabled属性仅在以下情况下为真:

Contact.IsValid
Contact.Address.IsValid
Array.TrueForAll(Person.Phones.Cast(Of Phone).ToArray, Function(p) p.IsValid)

我不喜欢使用转换器,但是只做Xamly,无论如何,我不介意使用本地代码(即引用当前页面中返回布尔值的方法,如System.Web.UI.WebControls.CustomValidator或类似的东西),但我真的不想要转换器,除非它是唯一的选择。

1 个答案:

答案 0 :(得分:0)

Thru this我能够解决我的问题。

我将IsEnabled属性绑定到我放在代码隐藏中的依赖项属性,如果项有效,则返回我称为IsValid的依赖项:

Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    btnOK.DataContext = Me
End Sub

Private m_IsValid As Boolean
Public Property IsValid() As Boolean
    Get
        Return GetValue(IsValidProperty)
    End Get
    Private Set(ByVal value As Boolean)
        SetValue(IsValidPropertyKey, value)
    End Set
End Property

Private Shared ReadOnly IsValidPropertyKey As DependencyPropertyKey = _
                        DependencyProperty.RegisterReadOnly("IsValid", _
                        GetType(Boolean), GetType(PersonEditor), _
                        New FrameworkPropertyMetadata(False))

Public Shared ReadOnly IsValidProperty As DependencyProperty = _
                       IsValidPropertyKey.DependencyProperty

我在要验证的所有项目的OnPropertyChanged事件处理程序中设置IsValid属性。

在Xaml中我设置了这样的按钮:

<Button Name="btnOk" IsEnabled="{Binding IsValid}"/>