我已经用我的VB.NET项目设置了Entity Framework。我有一个模型类,它从我的MS SQL Server数据库中获取表中的数据。我的ListBox对象是从模型类填充的。我想要做的是当用户点击列表框中的项目时,文本框中填充了表中的数据。如果用户点击野马,则文本框中会填充野马的模型,品牌和年份。
我在viewmodel类中使用了INotifyPropertyChanged,我认为这样可以让我获取数据集的每个部分。
此代码仅显示了一部分要求,以便更好地简化帖子
Public Class CarViewModel
Implements INotifyPropertyChanged
Private _SelectedCarModelName As CarModel
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Property SelectedCarModelName () As CarModel
Get
Return _SelectedCarModelName
End Get
Set(ByVal value As CarModel)
_SelectedCarModelName = value
OnPropertyChanged("CarName")
End Set
End Property
Public Overridable Sub OnPropertyChanged(propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
我的文本框数据绑定看起来像这样。我的文本框位于frm.vb。
txtCarName.DataBindings.Add("Text", _carViewModel.SelectedCarModelName.CarName, "CarName", True, DataSourceUpdateMode.OnPropertyChanged)
当我点击列表中的某个项目时,它将访问该属性,但不会设置属性更改。我知道我做错了什么但我不知道它是什么。
****** *******修订
视图模型
Public Class CarViewModel
Implements INotifyPropertyChanged
Private _SelectedCarModelName As CarModel
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Property SelectedCarModelName As CarModel
Get
Return _SelectedCarModelName
End Get
Set(ByVal value As CarModel)
_SelectedCarModelName= value
OnPropertyChanged("SelectedCarModelName ")
End Set
End Property
Public Sub OnPropertyChanged(propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
Windows窗体TextBox
**************编辑*******************
private _CarViewModel As CarViewModel
Dim bs As New BindingSource(_CarViewModel , Nothing)
txtCarName.DataBindings.Add _
("Text", bs, "SelectedCarModelName", True, DataSourceUpdateMode.OnPropertyChanged, String.Empty)
在我重新启动所有内容之后,出于某种原因我的机器喜欢它,我不再收到错误了。当我调试代码时,迭代Getter 3x的字段数。但它没有得到文本框的输出。