我有一个类Item
,有一个名为Children的BindableCollection
类型的属性。每个孩子都有我需要显示的不同信息,这是一个例子。
Public Property CurrentItem() As ObservableCollection(Of ItemModel)
'Used for displaying all item information
'Will only hold one item
Get
Return _currentItem
End Get
Set(ByVal value As ObservableCollection(Of ItemModel))
_currentItem = value
NotifyOfPropertyChange(Function() CurrentItem)
NotifyOfPropertyChange(Function() ItemsChildren)
End Set
End Property
Public Property ItemsChildren() As BindableCollection(Of ChildModel)
Get
If CurrentItem.Count > 0 Then
Return CurrentItem(0).Children
Else
Return New BindableCollection(Of ChildModel)
End If
End Get
Set(ByVal value As BindableCollection(Of ChildModel))
_itemChildren = value
End Set
End Property
XAML
<!-- Child Info DataGrid-->
<DataGrid ItemsSource="{Binding Path=ItemsChildren}" Grid.Row="3" Grid.ColumnSpan="2" Margin="10" AutoGenerateColumns="False" AlternatingRowBackground="Gray" CanUserAddRows="False" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Child" Binding="{Binding Path=ChildItem}" />
<DataGridTextColumn Header="Name" Binding="{Binding Path=ItemName}" />
<DataGridTextColumn Header="Assy" Binding="{Binding Path=Assembly}"/>
<DataGridTextColumn Header="Balloon Number" Binding="{Binding Path=BallNo}"/>
<DataGridTextColumn Header="Link Text" Binding="{Binding Path=LinkText}"/>
<DataGridTextColumn Header="Qty" Binding="{Binding Path=Quantity}"/>
</DataGrid.Columns>
</DataGrid>
ChildModel只是一个具有datagrid值的属性的类
当向CurrentItem添加项目时,CurrentItem的NotifyOfPropertyChange
都没有运行,因此ItemsChildren没有被更新。我怎么能强迫NotifyOfPropertyChange
?
不确定这是否可行,但在您的代码中,CurrentItem是一个ObservableCollection(ItemModel)。因为CurrentItem只能保存一个值,所以它应该是:
Public Property CurrentItem() As ItemModel
'Used for displaying all item information
'Will only hold one item
Get
Return _currentItem
End Get
Set(ByVal value As ItemModel
_currentItem = value
NotifyOfPropertyChange(Function() CurrentItem)
NotifyOfPropertyChange(Function() ItemsChildren)
End Set
End Property
当从datagrid中进行选择更改时,这应该触发NotifyOfPropertyChange()。在您的XAML中,您还需要添加SelectedItem属性:
<DataGrid ItemsSource="{Binding Path=ItemsChildren}" SelectedItem="{Binding Path=ItemModel, Mode=TwoWay}" Grid.Row="3" Grid.ColumnSpan="2" Margin="10" AutoGenerateColumns="False" AlternatingRowBackground="Gray" CanUserAddRows="False" HorizontalAlignment="Stretch">
希望这可以帮助。