C# 如何从带有复选框的列表视图中获取所选项目的列表?(没有代码隐藏)

C# 如何从带有复选框的列表视图中获取所选项目的列表?(没有代码隐藏),c#,wpf,listview,checkbox,entity-framework-core,C#,Wpf,Listview,Checkbox,Entity Framework Core,对不起,如果问题不清楚或者答案很明显,我必须在没有深入研究c#和WPF的情况下为学校做这个项目 我构建了一个带有以下复选框的列表视图 当我点击“过滤类别”按钮时,我想用一个加粗的复选框简单地获得所有项目(类别)的列表 我发现类似的问题和答案都涉及到使用代码,我做不到 我是否应该使用button CommandParameter将其传递给ViewModel?如果是,如何进行? 如果否,如何获取ViewModel中选定项目的列表 ViewModel的基本功能: namespace Projec

对不起,如果问题不清楚或者答案很明显,我必须在没有深入研究c#和WPF的情况下为学校做这个项目

我构建了一个带有以下复选框的列表视图

当我点击“过滤类别”按钮时,我想用一个加粗的复选框简单地获得所有项目(类别)的列表

我发现类似的问题和答案都涉及到使用代码,我做不到


我是否应该使用button CommandParameter将其传递给ViewModel?如果是,如何进行? 如果否,如何获取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);
                }
            });
        }
   
    }
}
namespace Project.ViewModel{
公共类问题ViewModel:ViewModelCommon{
私人课程;
公共课程{get=>Course;set=>SetProperty(ref-Course,value,OnRefreshData);}
私人可观察收集课程类别;
公共可观测集合课程类别{
get=>courseCategories;
set=>SetProperty(参考课程类别,值);
}
公共ICommand筛选器类别{get;set;}
公共问题viewmodel():base(){
FilterCategory=新的RelayCommand(类别=>{
foreach(类别中的var c){
Console.WriteLine(c.Title);
}
});
}
}
}
我是否应该在“category”模型中添加bool属性显示并将其绑定到复选框? 如果是的话,我仍然不知道如何获得所有加厚项目的列表

我是否应该在“category”模型中添加bool属性显示并将其绑定到复选框

如果是的话,我仍然不知道如何获得所有加厚项目的列表

只需从
课程类别
集合中筛选出它们,例如使用LINQ:

var checkedItems = courseCategories.Where(x => x.YourBoolProperty).ToArray():

对于那些想要实现同样目标的人

我已经向模型添加了一个bool属性(“Display”)


非常感谢,它起作用了。我觉得在模型中添加一个属性只是为了过滤,这很奇怪。它不是一个模型。这是一个视图模型。或者至少应该是这样。它工作正常,但我肯定做得不好,因为我不得不在“分类”模型中添加“bool display”。我不知道如何才能只在viewmodel中使用bool属性显示,而不作为“category”属性。我不明白。你似乎已经用我的建议解决了这个问题?是的,它起作用了,谢谢你!剩下的就不用管了;)
var checkedItems = courseCategories.Where(x => x.YourBoolProperty).ToArray():
<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}"  />
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);
                }
            });
        }