Извините, если вопрос неясен или ответ очевиден, я должен работать над этим проектом в школе, не углубляясь в C # и WPF.

Я создал представление списка с флажками после это

Я хотел бы просто получить список всех элементов (категорий) с жирным флажком, когда я нажимаю кнопку «Фильтровать категории».

Я нашел похожие вопросы с ответами, связанными с использованием кода, за которым я не могу.

enter image description here

<ListView x:Name="ListViewCategories" ItemsSource="{Binding CourseCategories}" >
                <ListView.View>
                    <GridView>
                        <GridViewColumn DisplayMemberBinding="{Binding Title}" Header="Category"/>
                        <GridViewColumn Header="Display" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate >
                                    <StackPanel Orientation="Horizontal">
                                        <CheckBox IsChecked="{Binding Path=IsSelected, 
                                            RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
        <Button  Content="Filter Categories" Command="{Binding FilterCategory}" CommandParameter="???" />

Должен ли я передать это ViewModel с помощью кнопки CommandParameter? Если да, то как? Если нет, как мне получить список выбранных элементов в моей ViewModel?

Суть ViewModel:

namespace Project.ViewModel {
    public class QuestionsViewModel : ViewModelCommon {

        private Course course;
        public Course Course { get => course; set => SetProperty(ref course, value, OnRefreshData); }

        private ObservableCollection<Category> courseCategories;
        public ObservableCollection<Category> CourseCategories {
            get => courseCategories;
            set => SetProperty(ref courseCategories, value);
        }

        public ICommand FilterCategory { get; set; }

        public QuestionsViewModel() : base() {

            FilterCategory = new RelayCommand<List<Category>>(categories => {
                foreach (var c in categories) {
                    Console.WriteLine(c.Title);
                }
            });
        }
   
    }
}

Должен ли я добавить отображение свойства bool в модель «категории» и привязать его к флажку? Если да, то я до сих пор не знаю, как получить список всех толстых предметов.

0
Tanuki 8 Июн 2021 в 16:53

2 ответа

Лучший ответ

Должен ли я добавить отображение свойства bool в модель «категории» и привязать его к флажку?

Да.

Если да, то я до сих пор не знаю, как получить список всех толстых предметов.

Просто отфильтруйте их из коллекции courseCategories, например, используя LINQ:

var checkedItems = courseCategories.Where(x => x.YourBoolProperty).ToArray():
1
mm8 8 Июн 2021 в 14:14

Для тех, кто хочет добиться того же.

Я добавил к модели свойство типа bool ("Display").

<ListView x:Name="ListViewCategories" ItemsSource="{Binding CourseCategories}" >
                <ListView.View>
                    <GridView>
                        <GridViewColumn DisplayMemberBinding="{Binding Title}" Header="Category" />
                        <GridViewColumn Header="Display" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate >
                                    <StackPanel Orientation="Horizontal">
                                        <CheckBox IsChecked="{Binding Display}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
        <Button  Content="Filter Categories" {Binding FilterCategory}"  Style="{StaticResource DarkBlueButton}"  />

Привязал чекбокс с отображением в ViewModel

public bool? Display {
            get { return Display; }
            set { Display = value; }
               
        }
public ICommand FilterCategory { get; set; }

        public QuestionsViewModel() : base() {
            
            FilterCategory = new RelayCommand(() => {
                var checkedItems = courseCategories.Where(x => x.Display).ToArray();
                foreach (var c in checkedItems) {
                    Console.WriteLine(c.Title);
                }
            });
        }
0
Tanuki 8 Июн 2021 в 14:38