C # WPF Loop & Delete Checked ListView Элементы - PullRequest
0 голосов
/ 28 мая 2019

Как человек, который недавно переключился с 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>

1 Ответ

3 голосов
/ 28 мая 2019

Кажется странным, что ItemsSource вашего ListView напрямую связан с текущим 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, ... });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...