2012-02-11 44 views
1

私はカスタムタイプのItemのレコードを保持するObservableCollectionを持っています。 WPFのListViewのバインドとしてそのコレクションを使用します。そのクラスItemは、インタフェースINotifyPropertyChangedも実装します。 ListViewのレコードの一部を更新すると、ListViewの変更が表示されます。WPFのObservableCollectionバインディング

これらのデータはすべてWCFサービスからのものです。 ObservableCollectionに属するアイテムを削除するために、サービスのクライアントオブジェクトを呼び出してdeleteメソッドを呼び出すと、レコードがDBで削除されますが、ListViewのアイテムは更新されません。 これは動作するかどうか、またはサービスコールでDBから手動でアイテムを削除するときにコレクションからアイテムを手動で削除する必要がありますか?ここで

おかげ

は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、特にバインディングコードを投稿できますか? –

答えて

4

私はあなたの状況を理解していれば、あなたが代わりに二つのこと

1持っている - あなたが通過しているListView内のデータを示すためのObservableCollectionWCFサービス。

2 - 。あなたはおそらくあなたがDBからレコードを削除するWCFサービスメソッドを呼び出し、それがパラメータで削除されなければならないオブジェクトを渡すことになるDB

にWCFを通じて削除操作を実行していますこのような場合には、ListViewにバインドされているObservableCollectionに変更を加えません。これはあなたのビューがどのような方法

に影響されないことを意味しますあなたは、リストを更新したり削除した後、あなたがDBからWCFを通じて新しいリストを要求しなければならないし、検索新しいリストで古いObservableCollectionを置き換える手動ObservableCollectionからレコードを削除する必要があります〜WCF

+0

私は、クラスがINotifyPropertyChangedを実装しているので、クラスのオブジェクトに変更が発生したときに、通知がスローされ、コレクションがキャッチしてそれ自身を更新すると考えました。 – Aaron

+1

オブジェクトの変更では不十分です。オブジェクトが削除された場合、コレクションからオブジェクトを削除する必要があります –

+0

ありがとうございます – Aaron

関連する問題