我有一个ObservableCollection,它保存自定义类型Item的记录。我使用该集合作为WPF中ListView的绑定。该类Item还实现了接口INotifyPropertyChanged。 当我更新ListView中的一些记录时,我可以看到ListView中的更改。
所有这些数据都来自WCF服务。当我为服务调用客户端对象并调用delete方法来删除属于ObservableCollection的项时,该记录将在DB中删除,但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>
答案 0 :(得分:4)
如果我了解你的情况,你有两件事
1 - ObservableCollection
用于显示ListView
中您通过WCF
服务获得的数据。
2 - 您正在通过WCF在DB上执行删除操作
最有可能的是,您将调用WCF
服务方法从DB中删除记录并传递必须在参数中删除的对象。如果是这种情况或类似情况,那么您不会在ObservableCollection
中对ListView
进行任何更改。这意味着您的视图不会受到任何影响
您应该手动从ObservableCollection
删除记录以更新列表,或者在删除后,您应该从DB
到WCF
请求新列表,并将旧ObservableCollection
替换为通过WCF