【问题标题】:Bind Button.IsEnabled to custom validation with XAML?使用 XAML 将 Button.IsEnabled 绑定到自定义验证?
【发布时间】:2010-12-16 15:08:02
【问题描述】:

很抱歉,我不知道如何更好地为我的问题命名,如果你得到一个好的 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 或其他东西像这样),但我真的不想要转换器,除非它是唯一的选择。

【问题讨论】:

    标签: wpf validation xaml multibinding


    【解决方案1】:

    通过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}"/>
    

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2013-02-22
      • 2019-06-17
      • 1970-01-01
      • 2023-03-03
      • 2017-01-23
      • 2016-10-16
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多