1

ItemsSource が DataView に設定されている場合、選択した ListViewItem を WPF ListView から削除するにはどうすればよいですか? 選択した ListViewItem を取得できますが、DataView の実際の行を削除するにはどうすればよいですか?

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

2 に答える 2

2

コレクションをリストビューにバインドするときは、DataViewの代わりにListCollectionViewを使用してください。次のように簡単に実行できます(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();
于 2009-10-26T05:32:30.857 に答える
0

MV-VM パターンを使用して、データ オブジェクトのリストからアイテムを削除するという概念と、現在の UI 実装からそれらを直接削除するという概念を分離することを検討してください。バインディングを除けば、この 2 つが互いについて知る必要はありません。

MVVM パターンを使用する場合は、ViewModel でブール型の「IsSelected」プロパティを公開します。

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;
      }
}

次に、ビューで次のようなことを試してください。

<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>

これにより、実際の ListView であるかのように、ViewModel のリスト内の項目を追加、編集、および削除できます。ここから、ListViewItem を実際にチェックせずに、各項目の IsSelected (ListView とのマウス操作に応答する) をチェックすることもできます。これは、はるかにクリーンで保守可能なソリューションになります。

于 2010-02-07T14:34:35.773 に答える