我直接从一张图片开始,显示我的结构,以便我可以使用图片询问我的问题。
我有这样的ParentModel
:
Public Class ParentModel
public Property ModelValue_A As String
Public Property ModelValue_B As String
End Class
我有一个ParentViewModel
,它有两个ChildViewModel
类型的属性。
Public Class ParentViewModel
Public Property Parent As ParentModel
Public Property ChildViewModel_A As ChildViewModel
Public Property ChildViewModel_B As ChildViewModel
Sub New
ChildViewModel_A = New ChildViewModel()
ChildViewModel_B = New ChildViewModel()
End Sub
End Class
我的ParentView
是这样的:
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ContentPresenter Content="{Binding ChildViewModel_A}"/>
<ContentPresenter Content="{Binding ChildViewModel_B}"/>
</StackPanel>
</DataTemplate>
我的ChildViewModel
是这样的:
Public Class ChildViewModel
Private _ChildValue As String
Public Property ChildValue As String
Get
Return _ChildValue
End Get
Set
_ChildValue = Value
NotifyPropertyChanged(NameOf(ChildValue))
End Set
End Class
我的ChildView
是这样的:
<DataTemplate>
<TextBox Text="{Binding ChildValue}" />
</DataTemplate>
我的NotifyPropertyChanged
方法:
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(info As [String])
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
当我启动应用程序时,我得到一个类似于上图的视图。在那里,我可以通过输入ChildValue
的TextBox
来改变ChildView
。但是,我仍然没有每个ChildValue
与其相应的ParentViewModel
属性:ChildViewModel_A
和ChildViewModel_B
之间的连接/关系。
我的问题是:如何通过改变ModelValue_A
的ChildValue
来改变ChildViewModel_A
,并分别通过改变ModelValue_B
的ChildValue
来改变ChildViewModel_B
?
您可以将事件处理程序连接到PropertyChanged
类中的ChildViewModel
的ParentViewModel
事件,并在此处设置ParentModel
的属性:
Public Class ParentViewModel
Public Property Parent As ParentModel
Public Property ChildViewModel_A As ChildViewModel
Public Property ChildViewModel_B As ChildViewModel
Sub New()
ChildViewModel_A = New ChildViewModel()
ChildViewModel_B = New ChildViewModel()
AddHandler ChildViewModel_A.PropertyChanged, AddressOf OnPropertyChangedA
AddHandler ChildViewModel_B.PropertyChanged, AddressOf OnPropertyChangedB
End Sub
Private Sub OnPropertyChangedA(sender As Object, e As PropertyChangedEventArgs)
Parent.ModelValue_A = ChildViewModel_A.ChildValue
End Sub
Private Sub OnPropertyChangedB(sender As Object, e As PropertyChangedEventArgs)
Parent.ModelValue_B = ChildViewModel_B.ChildValue
End Sub
End Class