【发布时间】:2016-01-17 09:22:07
【问题描述】:
大家好,
我已经搜索并搜索了此问题的答案,非常感谢有人的帮助!我敢肯定这是我缺少的一些简单的东西......
我的 DataGrid 似乎可以正确绑定并正确更新,但是 文本框和复选框没有更新。它们最初设置正确,但在选择另一个 DataGrid 项时不会更新。
如果我将文本框绑定直接设置为选定对象字符串,例如<TextBox x:Name="txtLastName" Text="{Binding Selection.LastName, Mode=TwoWay}" 然后文本框 do 更新新的选择(并正常工作)。但是以同样的方式绑定复选框是行不通的。我也相信这不是最佳做法......?绑定到 ViewModel LastName() 属性不是更好吗?
我有一个带有 DataGrid 和几个文本框和复选框的 MembersView:
<DataGrid ItemsSource="{Binding Path=MemberCollection}" SelectedItem="{Binding Path=Selection, Mode=TwoWay}" Name="DataGrid1"/>
<TextBox x:Name="txtFirstName" Text="{Binding FirstName, Mode=TwoWay}" />
<TextBox x:Name="txtLastName" Text="{Binding LastName, Mode=TwoWay}" />
<CheckBox x:Name="chbChairman" IsChecked="{Binding GeneralChairman}" Content="Chairman" />
<CheckBox x:Name="chbFillins" IsChecked="{Binding GeneralFillins}" Content="Fillins" />
代码隐藏集:DataContext = memberViewModel
MembersViewModel 包含:
Public Class MemberViewModel
Inherits ViewModelBase ' This implements INotifyPropertyChanged
Private _objMember As Member
Private _MemberCollection As MemberCollection
Dim _selectedMember As Member
Public Property Selection() As Member
Get
Return _selectedMember
End Get
Set(ByVal value As Member)
If value Is _selectedMember Then
Return
End If
_selectedMember = value
OnPropertyChanged("Selection")
End Set
End Property
Public Property MemberCollection As MemberCollection
Get
Return _MemberCollection
End Get
Set(ByVal value As MemberCollection)
_MemberCollection = value
OnPropertyChanged("MemberCollection")
End Set
End Property
Public Property Member() As Member
Get
Return _objMember
End Get
Set(ByVal Value As Member)
_objMember = Value
OnPropertyChanged("Member")
End Set
End Property
Public Property FirstName() As String
Get
Return _objMember.FirstName
End Get
Set(ByVal Value As String)
_objMember.FirstName = Value
OnPropertyChanged("FirstName")
End Set
End Property
Public Property LastName() As String
Get
Return _objMember.LastName
End Get
Set(ByVal Value As String)
_objMember.LastName = Value
OnPropertyChanged("LastName")
End Set
End Property
Public Property GeneralChairman() As Boolean
Get
Return _objMember.MemberUseFor.GeneralChairman
End Get
Set
_objMember.MemberUseFor.GeneralChairman = Value
OnPropertyChanged("GeneralChairman")
End Set
End Property
Public Property GeneralFillins() As Boolean
Get
Return _objMember.MemberUseFor.GeneralFillins
End Get
Set
_objMember.MemberUseFor.GeneralFillins = Value
OnPropertyChanged("GeneralFillins")
End Set
End Property
我的会员模型包含:
Public Property FirstName As String
Public Property LastName As String
Public Property MemberUseFor As MemberUseFor
和 MemberUseFor 包含:
Public Property GeneralChairman As Boolean
Public Property GeneralFillins As Boolean
Member 和 MemberUseFor 类没有实现 INotifyPropertyChanged,但我认为这是正确的......?
非常感谢有人帮助解释为什么在 DataGrid 中选择不同的行不会更新我的文本框和复选框。
再次感谢! 达米安
【问题讨论】:
标签: asp.net wpf vb.net datagrid