Связывание ObservableCollection в WPF - PullRequest
       17

Связывание ObservableCollection в WPF

1 голос
/ 11 февраля 2012

У меня есть ObservableCollection, которая содержит записи пользовательского типа Item.Я использую эту коллекцию в качестве привязки для ListView в WPF.Этот класс 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 Ответ

4 голосов
/ 11 февраля 2012

Если я понимаю вашу ситуацию, у вас есть две вещи на месте

1 - ObservableCollection для отображения данных в ListView, которые вы получаете через WCF Сервис.

2 - Вы выполняете операцию удаления с помощью WCF в БД

Скорее всего, вы будете вызывать WCF сервисный метод для удаления записи из БД и передачи ей объекта, который необходимо удалить в параметрах.,Если это или аналогичный случай, вы не вносите никаких изменений в ObservableCollection, который связан с ListView.Это означает, что на ваш просмотр никак не повлияет

. Вы должны удалить запись из ObservableCollection вручную, чтобы обновить список, или после удаления вы должны запросить новый список от DB до WCF изамените старый ObservableCollection новым списком, полученным через WCF

...