2012-02-11 113 views
1

我有一个ObservableCollection,它包含自定义类型Item的记录。我使用该集合作为WPF中ListView的绑定。该类的Item也实现了接口INotifyPropertyChanged。 当我更新ListView中的某些记录时,我可以看到ListView中的更改。WPF中的ObservableCollection绑定

所有这些数据来自WCF服务。当我调用服务的客户端对象并调用删除方法来删除属于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> 
+0

你能发布Xaml - 具体是绑定代码吗? – 2012-02-11 15:41:23

回答

4

如果我理解你的处境,你拥有两个东西

1 - 中ListViewObservableCollection用于显示数据,您是通过让WCF服务。

2 - 您是通过WCF在DB

执行删除操作

则很可能会被调用WCF服务方法,从数据库中删除记录,并传递对象,它在参数被删除。如果这种情况或类似情况发生,那么ObservableCollection中的ListView不会发生任何变化。这意味着您的视图将不以任何方式影响

你应该删除ObservableCollection记录手动更新列表或删除后,你应该通过WCF索要新的列表,从DB和检索的新列表替换旧ObservableCollection通过WCF

+0

我以为这个类实现了INotifyPropertyChanged,当一个类的对象发生变化时,它会抛出一个通知,并且集合生病了,并且会自动更新它。 – Aaron 2012-02-11 15:53:25

+1

更改对象是不够的。对象需要从收集中删除,如果它被删除 – 2012-02-11 15:56:42

+0

感谢您的帮助 – Aaron 2012-02-11 15:59:09

相关问题