wpf - 绑定到自定义对象 WPF + Caliburn.Micro 内的 BindableCollection
问题描述
我有一个类,它有一个名为 ChildrenItem
的类型的属性。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 只是一个类,它具有数据网格中值的属性
将项目添加到 CurrentItem 时,两个 CurrentItemNotifyOfPropertyChange
都不会运行,因此不会更新 ItemsChildren。我怎么能强迫NotifyOfPropertyChange
?
解决方案
不确定这是否可行,但在您的代码中 CurrentItem 是 ObservableCollection(of 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
当数据网格中的选择发生变化时,这应该会触发 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">
希望这可以帮助。
推荐阅读
- angular - 如何修复无线电组不会影响角度中的其他项目
- azure - 如何使用存储实现批量操作
- java - 如何从 JSP 的下拉列表中获取一个值到一个 servlet 中?
- onvif - 我得到“未实施”的回应
- sql - SQL查询从两个表中获取MCQ问题和答案的数据
- python - List[:][:] 在 Python 中真正做了什么?
- c++ - C ++:当两个类包含指向另一个类的指针时,如何解决派生类之间的模板循环依赖?
- objective-c - 字典数组中的字典 - Objective-C 中的逻辑挑战
- prolog - 在 prolog 中解决链式反应
- c# - 找出有多少用户可以同时在线?