目标
使用模型、视图、视图模型 (MVVM) 的方式将自定义类对象 (DamagedItems) 的列表添加到 DataGrid。
我希望用户能够创建损坏零件的条目(在检查机器时被认为不正确)。
我做了什么
我创造了:
- 一个窗口:wDamagedItems.xaml,其中
DataContext
设置为DamagedItemViewModel
- 模型:DamagedItemModel.vb实现
INotifyPropertyChanged
- A ViewModel: DamagedItemViewModel.vb我在其中设置类的属性,例如我的
DamagedItemModel
- 一个 ObservableCollection: DamagedItemList.vb继承了一个
ObservableCollection(Of DamagedItemModel)
由于我的 DataContext 设置为DamagedItemViewModel,因此我是这样设置属性的:
Public Class DamagedItemViewModel
Private _DamagedItem As DamagedItemModel
Private _Add As ICommand
Private _DamagedItems As DamagedItemList
Public Property DamagedItem As DamagedItemModel
Get
Return _DamagedItem
End Get
Set(value As DamagedItemModel)
_DamagedItem = value
End Set
End Property
Public Property DamagedItems As DamagedItemList
Get
Return _DamagedItems
End Get
Set(value As DamagedItemList)
_DamagedItems = value
End Set
End Property
Public Property Add As ICommand
Get
Return _Add
End Get
Set(value As ICommand)
_Add = value
End Set
End Property
Public Sub New()
DamagedItem = New DamagedItemModel("", "", "")
DamagedItems = New DamagedItemList
Add = New DamagedItemAddEntryCommand(Me)
End Sub
Public Function CanUpdate() As Boolean
If DamagedItem.Description = "" Then Return False
If DamagedItem.Initiales = "" Then Return False
Return True
End Function
Public Sub AddEntry()
DamagedItems.Add(DamagedItem) 'Items get added to the datagrid
DamagedItem = New DamagedItemModel 'Does not seem to clear textboxes
End Sub
End Class
这是我的 XAML 的设置方式:
<DataGrid ItemsSource="{Binding Path=DamagedItems}" AutoGenerateColumns="True" HorizontalAlignment="Stretch" Margin="12,90,12,0" Name="DataGrid1" VerticalAlignment="Top" Height="229" / >
<TextBox Text="{Binding DamagedItem.Description, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Margin="88,24,0,0" VerticalAlignment="Top" Width="249" />
<TextBox Text="{Binding DamagedItem.Initiales, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Margin="88,58,0,0" VerticalAlignment="Top" Width="249" />
如您所见,我的文本框绑定到我的模型(包含在我的 ViewModel 中,它绑定到该窗口的 DataContext)。每当我单击“添加”按钮时,文本框中的任何内容都会添加到 DataGrid,但文本框中的内容会保留在那里。
这一步很好,我写上我要添加的内容,点击“添加”
单击“添加”后,我在 DataGrid 中得到以下结果,这很好。问题是我的文本框仍然充满了数据,但模型已被清除(请参阅DamagedItemViewModel AddEntry
方法之后的代码)。
现在,当我尝试添加以下文本时:
- 描述:“部分弯曲”
- 首字母:“ AC ”
我得到以下结果:
在描述中键入的第一个字母被输入到 DataGrid 的第一个条目中,然后它会擦除描述文本框中的文本。只有这样我才能继续输入我想要的内容。首字母文本框也会发生同样的事情。
有任何想法吗?如果您希望查看更多我的代码,请建议我应该添加哪一部分。
先感谢您!