【问题标题】:User Control and Binding用户控制和绑定
【发布时间】:2010-03-11 02:14:49
【问题描述】:

我创建了一个自定义控件,它由两个单选按钮组成,它们的外观设置为“按钮”。此控件的作用类似于两个切换按钮,一个“开”切换按钮和一个“关闭”切换按钮。我有一个公共布尔属性“isAOn”,用于设置两个按钮的状态,我希望能够将此属性绑定到布尔值。我已经导入了组件模型并设置了

现在,当我将它添加到我的一个类中的布尔值的表单中时,当我更改按下的按钮时,它似乎并没有更新类的布尔值。

非常欢迎就如何解决此问题提出建议,并对课程设计提出建设性的批评。

谢谢!

代码如下:

Imports System.ComponentModel

''#
<DefaultBindingProperty("isAOn")> _
Public Class ToggleButtons

    Private _isAOn As Boolean
    Private _aText As String
    Private _bText As String
    Private _aOnColor As Color
    Private _aOffColor As Color
    Private _bOnColor As Color
    Private _bOffColor As Color

    Public Sub New()

        ''# This call is required by the Windows Form Designer.
        InitializeComponent()

        ''# Add any initialization after the InitializeComponent() call.
        aOffColor = Color.LightGreen
        aOnColor = Color.DarkGreen
        bOffColor = Color.FromArgb(255, 192, 192)
        bOnColor = Color.Maroon
        isAOn = False
        aText = "A"
        bText = "B"
    End Sub

    Private Sub configButtons()
        If _isAOn Then
            rbA.Checked = True
            rbA.BackColor = _aOnColor
            rbB.Checked = False
            rbB.BackColor = _bOffColor
        Else
            rbA.Checked = False
            rbA.BackColor = _aOffColor
            rbB.Checked = True
            rbB.BackColor = _bOnColor
        End If
        rbA.Text = aText
        rbB.Text = bText
    End Sub

    Public Property isAOn() As Boolean
        Get
            Return _isAOn
        End Get
        Set(ByVal value As Boolean)
            _isAOn = value
            configButtons()

        End Set
    End Property

    Private Sub rbOn_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbA.CheckedChanged
        isAOn = rbA.Checked
    End Sub

    Private Sub rbOff_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbB.CheckedChanged
        isAOn = Not rbB.Checked
    End Sub

    Public Property aText() As String
        Get
            Return _aText
        End Get
        Set(ByVal value As String)
            _aText = value
        End Set
    End Property
    Public Property bText() As String
        Get
            Return _bText
        End Get
        Set(ByVal value As String)
            _bText = value
        End Set
    End Property
    Public Property aOnColor() As Color
        Get
            Return _aOnColor
        End Get
        Set(ByVal value As Color)
            _aOnColor = value
        End Set
    End Property
    Public Property aOffColor() As Color
        Get
            Return _aOffColor
        End Get
        Set(ByVal value As Color)
            _aOffColor = value
        End Set
    End Property
    Public Property bOnColor() As Color
        Get
            Return _bOnColor
        End Get
        Set(ByVal value As Color)
            _bOnColor = value
        End Set
    End Property
    Public Property bOffColor() As Color
        Get
            Return _bOffColor
        End Get
        Set(ByVal value As Color)
            _bOffColor = value
        End Set
    End Property

End Class

【问题讨论】:

    标签: vb.net winforms data-binding


    【解决方案1】:

    您需要添加一个isAOnChanged 事件并在属性设置器中引发它。

    顺便说一下,.Net中的属性和方法应该是UpperCamelCased。

    【讨论】:

    • 谢谢,但我认为除了添加事件并提高它之外,还需要做更多的事情。应该如何处理?有没有办法自动保持这种双向绑定?
    • 没有。您需要做的就是创建一个具有正确名称和类型 (EventHandler) 的事件,并在值更改时触发它。
    • SLaks,我添加了一个事件“Public Event isAOnChanged As EventHandler”并在属性设置器中引发了此事件,但对象中绑定的布尔属性仍然没有得到任何活动。
    • 我不知道为什么那行不通;它在我的代码中运行良好。你要绑定什么?
    • 现在工作!伟大的!将 DataBinding 的数据源更新模式从 OnValidation 更改为 OnPropertyChanged,这会立即推动更改。感谢您的帮助!
    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2012-06-20
    • 2011-11-30
    • 2016-01-17
    相关资源
    最近更新 更多