首页 > 其他分享 >handyControl使用datagrid

handyControl使用datagrid

时间:2023-04-15 15:33:21浏览次数:48  
标签:handyControl set get private datagrid Score 使用 new public

使用HandyControl实现多选的DataGrid

 

本文在MVVM模式先实现了基于HandyControl的DataGrid多选,同时展示了为DataGrid单元格显示不同颜色的方法,开发环境为:WPF + Prism + HandyControl。

  1、添加多选列

复制代码
<DataGridTemplateColumn Width="Auto">
    <DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <CheckBox Content="全选" IsChecked="{Binding DataContext.CheckAll, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTemplateColumn.HeaderStyle>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
复制代码

2、为Model添加IsSelected属性

复制代码
public class Student : BindableBase
{
    public string Name { get; set; }
    public int Score { get; set; }
    public Brush ScoreBrush => Score >= 60 ? PassedBrush : NotPassedBrush;

    public bool IsSelected
    {
        get => _isSelected;
        set => SetProperty(ref _isSelected, value);
    }

    private bool _isSelected;

    private static readonly Brush PassedBrush = new SolidColorBrush(Colors.Green);
    private static readonly Brush NotPassedBrush = new SolidColorBrush(Colors.Red);
}
复制代码

3、为ViewModel添加全选响应代码

复制代码
public class StudentWindowViewModel : BindableBase
{
    public ObservableCollection<Student> StudentList { get; }

    public bool CheckAll
    {
        get => _checkAll;
        set
        {
            SetProperty(ref _checkAll, value);
            foreach (var item in StudentList)
            {
                item.IsSelected = value;
            }
        }
    }

    private bool _checkAll; //全选

    public StudentWindowViewModel()
    {
        StudentList = new ObservableCollection<Student>()
        {
            new Student() {Name = "Student1", Score = 80},
            new Student() {Name = "Student2", Score = 60},
            new Student() {Name = "Student3", Score = 57}
        };
    }
}
复制代码

4、DataGrid完整代码

复制代码
<DataGrid ItemsSource="{Binding StudentList}"
          Background="Transparent" BorderThickness="1"
          hc:DataGridAttach.CanUnselectAllWithBlankArea="True" 
          hc:DataGridAttach.ShowRowNumber="True"
          HeadersVisibility="All" RowHeaderWidth="40" AutoGenerateColumns="False" 
          SelectionMode="Single" SelectionUnit="FullRow">
    <DataGrid.Columns>
        <DataGridTemplateColumn Width="Auto">
            <DataGridTemplateColumn.HeaderStyle>
                <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <CheckBox Content="全选" IsChecked="{Binding DataContext.CheckAll, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGridTemplateColumn.HeaderStyle>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                              HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn IsReadOnly="True" CanUserSort="False" Binding="{Binding Name}" Header="姓名"/>
        <!--DataGridCheckBoxColumn IsReadOnly="False" CanUserSort="False" Binding="{Binding IsSelected, Mode=TwoWay}" Header="选中"/-->
        <DataGridTemplateColumn IsReadOnly="True" CanUserSort="False" Header="分数">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Score}" Foreground="{Binding ScoreBrush}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
复制代码

标签:handyControl,set,get,private,datagrid,Score,使用,new,public
From: https://www.cnblogs.com/rb-huang/p/17321231.html

相关文章

  • java8使用stream流将list转map
    java8使用stream流将list转map原文链接:https://blog.csdn.net/weixin_43769566/article/details/123815887stream将list转化为map在Stream流中将List转换为Map,是使用Collectors.toMap方法来进行转换。1.key和value都是对象中的某个属性值。Map<String,String>userMap1......
  • miui12ai电话助理使用方法
    miui12推出很多新的功能,就比如这次的ai通话助理升级为了ai通话,但是很多新用户却不知道怎么打开,今天就为这些小伙伴带来了使用ai通话的方法,一起看看吧。miui12ai电话助理在哪:1、点击左下角处的“电话”。2、点击三个横线。3、在“功能选项”中选择“AI”。4、在“声明与条......
  • 使用 Python 的 socket 库来实现一个简单的 Socket 示例
    以下是一个简单的服务器端和客户端的例子:服务器端:pythonimportsocket#创建socket对象serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#获取本地主机名host=socket.gethostname()#设置端口号port=9999#绑定端口号serversocket.bind((h......
  • Zotero 设置坚果云同步(使用 WebDAV 的方法)
    1.坚果云设置登录坚果云:官网,注册账号1.建立个人文件夹:zotero2.在网页打开右上角的账户信息,并选择安全选项在页面下方选择添加应用并输入与前面文件夹对应的名称zotero2.Zotero中设置选择编辑中的首选择项,打开同步将坚果云网站对应的信息依次填入zotero中,验......
  • Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?
       Mysql中,为什么WHERE使用别名会报错,而ORDERBY不会报错? 我们先对salary*12命名一个别名annual_salSELECTemployee_id,salary,salary*12annual_salFROMemployeesORDERBYannual_sal; 这段代码以annual_sal升序输出且正常执行没有报错。说明orderby......
  • ROS2的安装与使用
    ROS2的安装与使用(超详细图文教程)如果前面的虚拟机以及Ubuntu22.04镜像都安装好了,根据目录直接跳到ROS2的安装。资料参考于:古月居VMware虚拟机的安装安装地址:对于不了解liunx的新手来说,装双系统可能不是很友好,建议使用虚拟机安装ubuntu。这里推荐VMware这款虚拟机。官方......
  • 使用okhttp-4.10.0.jar报,但是发现没有HttpLoggingInterceptor的解决方法
    HttpLoggingInterceptor是OkHttp库中的一个拦截器,可以用于记录HTTP请求和响应的信息,如请求和响应的头部、HTTP方法和请求体等。在OkHttp3.x版本中,HttpLoggingInterceptor是内置的,可以直接使用。但是在OkHttp4.x版本中,HttpLoggingInterceptor被移动到了另外一个库ok......
  • pnpm 安装以及使用
    初始化--使用pnpm做包管理,本地未安装pnpm的,请先全局安装pnpm在cmd中输入npminstall-gpnpm-一般来说记这个就行常用代码启动项目(和npm一样即可)pnpmrundev|下载包(XXX)pnpminstall(XXX)遇到的问题:无法加载文件C:\Users\hp\AppData\Roaming\npm\pnpm.ps1,因为在......
  • 使用自签名证书,新手必然会遇到的问题
    前言有关加解密、https握手连接、域名证书等基础知识,请自我学习了解。介绍大家都会用的工具:https安全评估工具:https://myssl.com/https最佳安全实践介绍: https://myssl.com/ 首页底部 1、如何获取数字证书(签名证书)任何机构或者个人都可以申请数字证书,并使用由CA机构颁发......
  • 使用flash id查看SSD颗粒
    参考常见SSD固态硬盘不拆盘判断颗粒的办法_固态硬盘_什么值得买读懂固态硬盘中的“黑话”-简易百科先需要知道自己的主控是什么,常见的是这些Phison=群联SMI=慧荣Marvel=美满电子(马牌主控)Maxio=联芸Yeestor(SiliconGo)utility=得一微我一般的猜测顺序......