所以经过半天,我终于想出了如何解决这个问题。
实际上,我已经在 VB.net 中完成了编码,因为我更熟悉 VB 语法而不是 C# 语法。尽管如此,由于它们受 .NET 框架的限制,因此它们的逻辑非常相似。
form 属性如下(尽管原始帖子中的枚举也是可能的。):
Public Property propGender() As String
Get
If RadioButton1.Checked = True Then
Return "M"
Else
Return "F"
End If
End Get
Set(ByVal value As String)
_Sex = value
If _Sex = "M" Then
RadioButton1.Checked = True
Else
RadioButton2.Checked = True
End If
End Set
End Property
这是微不足道的,但我只包含该代码片段以进行进一步说明。
关于如何对表单属性进行数据绑定的答案很简单:
Dim genderBinder = New Binding("propGender", Tbl_Stud_InfoBindingSource, "Gender")
Me.DataBindings.Add(genderBinder)
Me.DataBindings.Add(genderBinder)
Gender
我需要的数据成员在哪里。使用单选按钮调整表单属性是我感到困惑的地方(直到现在,老实说)。INotifyPropertyChanged
通过实现接口解决了这个问题。我以前认为这是隐含在每个项目中的,但很容易发现System.ComponentModel
应该先导入。感谢MSDN。
Imports System.ComponentModel
引发 protertyChanged 事件可以通过以下方式完成:
Protected Sub OnPropertyChanged(ByVal name As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
OnPropertyChanged("propGender")
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
OnPropertyChanged("propGender")
End Sub
其中 RadioButton1 = 男性单选框和 RadioButton2 = 女性(最好遵循良好的命名约定!)。
我不太熟悉 C# 语法,但认为提升 checkChanged 属性的等效代码是:
RadioButton1.CheckedChanged += (s, args) => OnPropertyChanged("propGender");
RadioButton2.CheckedChanged += (s, args) => OnPropertyChanged("propGender");
最后,通过这种方式,我现在可以轻松地绑定单选按钮 - 我知道解决这个问题很容易,但这是像我这样的初学者的常见问题。在 VB6 中,这可以通过使用流行的记录集轻松实现。在 .NET 中,解决方案并不明显。
编辑:
我在 SO 中看到了与同一场景有关的其他一些问题。我找到了两个,但它们都使用 C#,这对于 VB 用户来说可能是模糊的。
编辑:
我用来弄清楚的缺失的关键术语只是“数据绑定单选按钮”。这就是为什么我想更改这个问题的标题以使其更加明确。