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