Как удалить ListViewItem при привязке к DataView - PullRequest
1 голос
/ 24 октября 2009

Как удалить выбранный ListViewItem из WPF ListView, когда для ItemsSource установлено значение DataView? Я могу получить ListViewItem, который был выбран, а затем как удалить фактическую строку в DataView?

DataView dv = (DataView)myListView.ItemsSource;
ListViewItem lvi = (ListViewItem)myListView.ItemContainerGenerator.ContainerFromItem(myListView.SelectedItem);
<Delete ListViewItem here> 

Ответы [ 2 ]

2 голосов
/ 26 октября 2009

Когда вы привязываете свою коллекцию к списку, используйте ListCollectionView вместо DataView. Это может быть легко сделано следующим образом (где dataView имеет тип DataView):

ListCollectionView lcv = new ListCollectionView(dataView);
myListView.ItemsSource = lcv;

Теперь, когда вам нужно удалить любой объект, просто сделайте это:

ListCollectionView lcv = (ListCollectionView) myListView.ItemsSource;
lcv.Remove(myListView.SelectedItem);

А после удаления просто обновите вид:

lcv.Refresh();

или

((ListCollectionView)myListView.ItemsSource).Refresh();
0 голосов
/ 07 февраля 2010

Рассмотрите возможность использования шаблона M-V-VM, чтобы отделить понятие удаления элемента из списка объектов данных и ПРЯМО удаления из текущей реализации пользовательского интерфейса. Этим двум не нужно знать друг о друге, кроме Привязок.

Когда вы используете шаблон MVVM, предоставьте логическое свойство IsSelected в вашей ViewModel.

public class SimpleViewModel : BaseViewModel //For INotifyPropertyChanged, etc
{

      public IList<SimpleBusinessObject> ViewModelItems;

      public SimpleViewModel()
      {
             ViewModelItems = new ObservableList<SimpleBusinessObjectViewModel>();
      }

}

public class SimpleBusinessObjectViewModel
{
      public bool ViewModelIsSelected { get; set; }

      public SimpleBusinessObjectViewModel()
      {
             ViewModelIsSelected = false;
      }
}

Далее, в вашем View попробуйте что-то вроде этого:

<Style TargetType="{x:Type ListViewItem}">
       <Style.Triggers>
               <Setter Property="IsSelected" Value="{Binding ViewModelIsSelected}"
       </Style.Triggers>
</Style>
<ListView ItemsSource={Binding ViewModelItems}>   
       //here you can insert how you want to display a ListViewItem
</ListView>

Это позволит вам добавлять, редактировать и удалять элементы в списке ViewModel - как если бы это был настоящий ListView. Отсюда вы также можете проверить IsSelected каждого элемента (который реагирует на взаимодействие мыши с ListView) без фактической проверки ListViewItem. Это будет гораздо более чистое и удобное решение.

...