繁体   English   中英

C#WPF循环并删除选中的ListView项目

[英]C# WPF Loop & Delete Checked ListView Items

作为最近从WinForms切换到WPF的人,我仍然在努力寻找方法来遍历删除选中的ListView项目

此方法给我错误:“ ListView不包含CheckedItems的定义...”

    if (lvFilesList != null)
    {
        foreach (ListViewItem lvItem in lvFilesList.CheckedItems)
        {
            lvItem.Checked = False;
        }
    }

我的XAML代码:

            <ListView Height="400" Width="400"
              Name="lvFilesList"                       
              ItemsSource="{Binding}"
              IsSynchronizedWithCurrentItem="True">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn>
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox Name="chk" IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></CheckBox>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}"/>
                            <GridViewColumn Header="File" DisplayMemberBinding="{Binding File}"/>
                            <GridViewColumn Header="Author" DisplayMemberBinding="{Binding Author}"/>
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
                <ListView.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock FontWeight="Bold" Text="Group"/>
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>
                    </GroupStyle>
                </ListView.GroupStyle>
            </ListView>

ListView的ItemsSource通过以下方式直接绑定到当前DataContext看起来很奇怪

ItemsSource="{Binding}"

DataContext通常会保存一个具有收集类型属性的视图模型对象,例如

public class Item
{
    public bool IsChecked { get; set; }

    // other properties like ID, File, Author
}

public class ViewModel
{
    public ObservableCollection<Item> Items { get; }
        = new ObservableCollection<Item>();
}

绑定将是

ItemsSource="{Binding Items}"

然后,视图模型可以具有删除所有选中项的方法,例如

public void DeleteCheckedItems()
{
    var checkedItems = Items.Where(item => item.IsChecked).ToList();

    checkedItems.ForEach(item => Items.Remove(item));
}

注意,通常将视图模型类的实例分配给主视图的DataContext,例如在MainWindow构造函数中:

private readonly ViewModel viewModel = new ViewModel();

public MainWindow()
{
    InitializeComponent();
    DataContext = viewModel;

    viewModel.Items.Add(new Item { ID = 1, ... });
    viewModel.Items.Add(new Item { ID = 2, ... });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM