[英]ObservableCollection binding in WPF
我有一个ObservableCollection,其中包含自定义类型Item的记录。 我使用该集合作为WPF中ListView的绑定。 该类Item还实现了INotifyPropertyChanged接口。 当我更新ListView中的某些记录时,可以在ListView中看到更改。
所有这些数据都来自WCF服务。 当我调用该服务的客户端对象并调用delete方法删除属于ObservableCollection的项目时,该记录在数据库中被删除,但ListView中的项目未更新。 这是应该如何工作的,还是当我通过服务调用从数据库中删除项目时,应该手动从集合中删除项目吗?
谢谢
这是XAML:
<ListView ItemsSource="{Binding AllItems}" Height="244" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" Margin="1,25,0,0" Name="listView1" VerticalAlignment="Top" Width="485" >
<ListView.ContextMenu>
<ContextMenu AllowDrop="False">
<MenuItem Name="openRecord" Header="Open" Click="ContextMenuItem_Click" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
<MenuItem Name="deleteRecord" Header="Delete" Click="ContextMenuItem_Click" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
</ContextMenu>
</ListView.ContextMenu>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="list_UserItems_ItemMouseDoubleClick" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Title}" Header="Title" Width="200" />
<GridViewColumn DisplayMemberBinding="{Binding CreatedByName}" Header="Created By" Width="100" />
<GridViewColumn DisplayMemberBinding="{Binding CreatedOn}" Header="Created On" Width="100" />
<GridViewColumn DisplayMemberBinding="{Binding ExpirationDate}" Header="Expires" Width="100" />
</GridView>
</ListView.View>
</ListView>
如果我了解你的情况,你有两件事
1-一个ObservableCollection
用于在通过WCF
服务获取的ListView
中显示数据。
2-您正在通过WCF在数据库上执行删除操作
很可能您将调用WCF
服务方法从数据库中删除记录,并将必须在参数中删除的对象传递给它。 如果是这种情况或类似情况,则您不会对绑定到ListView
ObservableCollection
进行任何更改。 这意味着您的视图不会受到任何影响
您应该手动从ObservableCollection
删除记录以更新列表,或者删除后,您应该通过WCF
从DB
请求新列表,并将旧的ObservableCollection
替换为通过WCF
检索到的新列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.