c# - WPF - 尝试创建绑定到数据源的多选表时使用 Datagrid、ListView 或 Listbox
问题描述
我是 WPF 的新手,我正在尝试重新创建这样的设计:
我需要的功能是:多选一行的能力(因此右边的复选框),能够绑定到数据源并加载数据的能力。最后,能够在某些行上包含一个小图标。
谷歌搜索后,我发现了 ListView、ListBox 和 DataGrid 控件,但似乎它们都可以做一些事情,但不是我需要的全部。谁能指导我哪个是最好的方法?
解决方案
我个人更喜欢使用DataGrid
类似的东西。一旦您习惯了它们,它们就非常灵活且易于使用。我假设您根据您的问题对 WPF 中的绑定有所了解。假设您的类实现iNotifyPropertyChanged
aDataGrid
应该为您工作。下面的示例,您将不得不根据您的类属性名称更改您的绑定。
这个例子没有使用内置,DataGridCheckBoxColumn
因为它往往有问题(即,它需要焦点才能单击它)。这也将让您了解如何实现图标列。您可以通过按住控件并抓取不同的行来进行多行选择,或者您可以使用复选框并将它们绑定到您以后可以访问的类中的属性。
<DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectionMode="Extended">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" MinWidth="150" SortMemberPath="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTextColumn Header="University" Binding="{Binding University}" IsReadOnly="True"/>
<DataGridTextColumn Header="Age" Binding="{Binding Age}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
现在只需从您的代码后面绑定到它。
dataGrid.ItemsSource = myClass;
希望这能让你朝着正确的方向开始。
推荐阅读
- redis - 如何保留前 10 个成员并删除 Redis 排序集的其余部分?
- python - 为什么 os.path.normpath 不删除第一个 //?
- postgresql - Postgresql:EXECUTE sql_cmd 与 CREATE TEMP TABLE temp_tbl AS SELECT 合并
- amazon-web-services - AWS ECS:通过 Cloudformation 创建 ECS 服务时出现 IAM 相关错误
- python-3.x - 将原始 Scapy 数据解码为人类可读的
- python - Python语音识别速度变慢
- .net - Datagrid 单元格中的文本格式
- php - 尝试更新联系人记录,但我获得执行操作的权限被拒绝 id
- c++ - 您是否使用 cv::calibrateCamera() 获得与使用 cv::fisheye::calibrate() 相同的相机矩阵结果
- python - 带有变量的字典的索引字典