当选择DataGrid项时,VB.net WPF Databinding不更新TextBox(VB.net WPF Databinding not updating TextBox when Data

编程入门 行业动态 更新时间:2024-10-25 16:28:39
当选择DataGrid项时,VB.net WPF Databinding不更新TextBox(VB.net WPF Databinding not updating TextBox when DataGrid item selected)

大家好,

我搜索并搜索了这个答案,非常感谢别人的帮助! 我相信这很简单,我很想念......

我的DataGrid似乎正确绑定,并正确更新,但文本框和复选框不会更新 。 它们最初设置正确,但在选择另一个DataGrid项时不会更新。

如果我将Textbox Binding直接设置为Selected对象String,例如<TextBox x:Name="txtLastName" Text="{Binding Selection.LastName, Mode=TwoWay}"那么Textboxs会对新选择进行更新(并正常工作) 。 但以相同的方式绑定复选框不起作用。 我也相信这不是最佳做法......? 绑定到ViewModel LastName()属性不是更好吗?

我有一个带有DataGrid的MembersView和几个Textboxes和Checkboxes:

<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" />

Codebehind集: 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

MemberMemberUseFor类没有实现INotifyPropertyChanged,但我认为这是正确的......?

非常感谢有人帮助解决为什么在DataGrid中选择不同的行不会更新我的文本框和CheckBoxes。

再次感谢! 达米安

G'day everyone,

I have searched and searched for an answer to this, would really appreciate someone's help! I am sure this is something simple that I'm missing...

My DataGrid appears to Bind correctly, and updates correctly, however the Textboxes and Checkboxes don't update. They are initially set correctly, but wont update when another DataGrid item is selected.

If I set the Textbox Binding directly to the Selected object String, e.g. <TextBox x:Name="txtLastName" Text="{Binding Selection.LastName, Mode=TwoWay}" then the Textboxs do update on new selection (and work correctly). But Binding the Checkboxes in the same way doesn't work. I also believe this is not best practice...? Isn't it better to Bind to the ViewModel LastName() property?

I have a MembersView with a DataGrid and several Textboxes and Checkboxes:

<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" />

Codebehind sets: DataContext = memberViewModel

MembersViewModel contains:

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

My Member model contains:

Public Property FirstName As String Public Property LastName As String Public Property MemberUseFor As MemberUseFor

and MemberUseFor contains:

Public Property GeneralChairman As Boolean Public Property GeneralFillins As Boolean

The Member and MemberUseFor classes don't implement INotifyPropertyChanged, but I think that is correct...?

Would greatly appreciate someone's help with why the selecting differet rows in the DataGrid won't update my Text Boxes and CheckBoxes.

Thanks again! Damian

最满意答案

你在这里混淆了一些事情:

您的Member资产似乎没有任何用处。 Selection和Member似乎在做同样的工作。 因此,删除Member属性及其基础本地成员_objMember 。 如果要遵循Microsoft约定,则Selection属性最好命名为SelectedMember 。 FirstName和LastName应该在Member类中定义,而不是在MembersViewModel 。 然后, TextBox和CheckBox对象的绑定将采用Text="{Binding SelectedMember.LastName, Mode=TwoWay}"等形式。 MemberViewModel以及Member类应该实现INotifyPropertyChanged 。 更好的是使用一些MVVM框架,如MVVM Light 。 这将使您的工作更容易。

You are confusing a few things here:

Your Member property doesn't seem to have any use. Selection and Member appear to be doing the same job. So remove Member property and its underlying local member _objMember. Selection property would better be named as SelectedMember if you want to follow Microsoft conventions. FirstName and LastName should really be defined inside Member class, not in the MembersViewModel. Binding of your TextBox and CheckBox objects would then be in the form Text="{Binding SelectedMember.LastName, Mode=TwoWay}" etc. MemberViewModel as well as Member class should implement INotifyPropertyChanged. Even better would be to use some MVVM framework such as MVVM Light. This will make your job FAR easier.

更多推荐

DataGrid,Binding,LastName,Member,电脑培训,计算机培训,IT培训"/> <meta name=&q

本文发布于:2023-07-21 09:33:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1208985.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:net   WPF   VB   DataGrid   项时

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!