数据绑定ChildDataContext的属性不更新ChildView

时间:2014-08-15 13:16:31

标签: wpf vb.net xaml mvvm data-binding

我有一个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没有响应/接收属性更改。

1 个答案:

答案 0 :(得分:0)

我在SetView中定义了一个DataContext,以获得设计时数据和自动完成功能:

<UserControl.DataContext>
        <model:SetViewModel />
</UserControl.DataContext>

View似乎实例化了它的DataContext,支持MainWindow定义的内容,导致没有显示任何内容,而SetView只与它的SetViewModel实例通信。

删除该行后,一切都按预期进行,数据正在正确更新。