WPF中的ObservableCollection绑定

时间:2012-02-11 15:22:18

标签: c# wpf wcf

我有一个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>

1 个答案:

答案 0 :(得分:4)

如果我了解你的情况,你有两件事

1 - ObservableCollection用于显示ListView中您通过WCF服务获得的数据。

2 - 您正在通过WCF在DB上执行删除操作

最有可能的是,您将调用WCF服务方法从DB中删除记录并传递必须在参数中删除的对象。如果是这种情况或类似情况,那么您不会在ObservableCollection中对ListView进行任何更改。这意味着您的视图不会受到任何影响

您应该手动从ObservableCollection删除记录以更新列表,或者在删除后,您应该从DBWCF请求新列表,并将旧ObservableCollection替换为通过WCF

检索的新列表