使用INotifyPropertyChanged将TextBox数据绑定到Listbox

时间:2018-01-24 14:45:58

标签: vb.net winforms inotifypropertychanged listboxitem

我已经用我的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的字段数。但它没有得到文本框的输出。

0 个答案:

没有答案