我有一个TabControl绑定到TabViewModel列表,每个ViewModel代表一个View的DataContext(ViewModel),它放在TabControl中。
我的MainView拥有一个包含以下绑定的ComboBox:
<ComboBox DataContext="{Binding CurrentTabViewModel}"
DisplayMemberPath="SetNr"
SelectedItem="{Binding CurrentSet}"
ItemsSource="{Binding AllSets}"
SelectedIndex="0">
我的MainViewModel初始化列表并使标签显示在视图中。 CurrentTabViewModel是一个SetViewModel,它包含了这个和一些额外的东西:
Public Class SetViewModel
Implements IPageViewModel, INotifyPropertyChanged
Public Property CurrentSet() As Set Implements IPageViewModel.CurrentSet
Get
Return _currentSet
End Get
Set(value As SetEntity)
If Not _currentSet Is value Then
_currentSet = value
OnPropertyChanged("CurrentSet")
End If
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler Implements
INotifyPropertyChanged.PropertyChanged
Protected Sub OnPropertyChanged(ByVal name As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
End Sub
End Class
IPageViewModel看起来像这样:
Public Interface IPageViewModel
ReadOnly Property Name As String
Property CurrentSet() As SetEntity
End Interface
我的SetView与内容有以下Bindings,它的DataContext是 SetViewModel:
<ContentControl Content="{Binding CurrentSet}" ContentTemplate="{StaticResource Set}" />
我有ViewTemplate用于View的内容
<DataTemplate x:Key="Set" DataType="{x:Type entity:SetEntity}" />
实体包含我在视图中表示的一些字段,这些字段只是一堆控件 为他们的内容添加一些数据绑定。数据库连接工作和AllSet 正确地从数据库中检索。
问题是当我更改我的ComboBox中的所选项目时,它会更新 我的SetViewModel上的属性,它会触发OnPropertyChanged事件,但视图不会触发 进行更新。它保持空白。我已经尝试使用以下XAML在MainView中添加标签:
<Label DataContext="{Binding CurrentTabViewModel}"
Content="{Binding CurrentSet.SetNr}" />
上面的XAML确实响应了CurrentSet视图的更改。看起来好像是 SetView没有响应/接收属性更改。
答案 0 :(得分:0)
我在SetView中定义了一个DataContext,以获得设计时数据和自动完成功能:
<UserControl.DataContext>
<model:SetViewModel />
</UserControl.DataContext>
View似乎实例化了它的DataContext,支持MainWindow定义的内容,导致没有显示任何内容,而SetView只与它的SetViewModel实例通信。
删除该行后,一切都按预期进行,数据正在正确更新。