datagrid row和checkbox冲突

qq14923349 2018-01-25 05:27:49
是这样的
我在datagrid的rowstyle里面 将isselected绑定model的isselected属性 双向绑定,目的是实现选中行高亮

然后在datagridtemplatecolumn里面的celltemplate
加了一个checkbox ,为了显示选中checkbox 该行高亮,我将该ischecked 也绑定到model的isselected属性上

但是运行加断点后 勾选checkbox发现isselected属性被触发两次
一次为true 后一次为false

这样子就勾选不上

什么原因导致 有办法避免吗?

我要实现的是选中该行 ,该行的checkbox被勾上,
勾上checkbox的时候 该行也能高亮
因此绑定isselected,但是就是有问题 ,哪不对了?
...全文
643 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14923349 2018-03-01
  • 打赏
  • 举报
回复
引用 10 楼 duanzi_peng 的回复:
有这种问题,我再测测。
算了 我放弃datagrid了
  • 打赏
  • 举报
回复
引用 12 楼 qq14923349 的回复:
[quote=引用 10 楼 duanzi_peng 的回复:] 有这种问题,我再测测。
算了 我放弃datagrid了[/quote] 不要放弃呀。 把 <Setter Property="IsSelected" Value="{Binding IsChecked}"></Setter> 以及 CheckBox的Click事件 去掉。 再把 IsChecked 的绑定改为: IsChecked="{Binding DataContext.IsChecked,RelativeSource={RelativeSource AncestorType=DataGridRow}}"形式。 再在 DataGrid的SelectionChanged事件中类似:

  private void Dg_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count == 1)
            {
                ColorClass colorClass = (ColorClass)e.AddedItems[0];
                colorClass.IsChecked = !colorClass.IsChecked;
            }

        }
qq14923349 2018-02-07
  • 打赏
  • 举报
回复
引用 10 楼 duanzi_peng 的回复:
有这种问题,我再测测。
老大 这个问题还有救吗 被折磨死了 思路很清晰 就是郁闷
  • 打赏
  • 举报
回复
有这种问题,我再测测。
qq14923349 2018-02-01
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:

 <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Margin="12,0,0,0" HorizontalAlignment="Center" Content="{Binding DataContext.Id,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsThreeState="False"   Click="CheckBox_Click"></CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>

  private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
            chk.IsChecked = true;
        }
DataGridRow:

    <Setter Property="IsSelected" Value="{Binding IsChecked}"></Setter>
还有个问题 已勾选后 再点击checkbox怎么去不了勾呢
qq14923349 2018-02-01
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:

 <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Margin="12,0,0,0" HorizontalAlignment="Center" Content="{Binding DataContext.Id,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsThreeState="False"   Click="CheckBox_Click"></CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>

  private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
            chk.IsChecked = true;
        }
DataGridRow:

    <Setter Property="IsSelected" Value="{Binding IsChecked}"></Setter>
还真的行了 主要是click事件 厉害
qq14923349 2018-02-01
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:

 <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Margin="12,0,0,0" HorizontalAlignment="Center" Content="{Binding DataContext.Id,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsThreeState="False"   Click="CheckBox_Click"></CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>

  private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
            chk.IsChecked = true;
        }
DataGridRow:

    <Setter Property="IsSelected" Value="{Binding IsChecked}"></Setter>
IsThreeState="False" checkbox有这属性 不加是不是有问题 难道是这个状态导致的bug
  • 打赏
  • 举报
回复


<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Margin="12,0,0,0" HorizontalAlignment="Center" Content="{Binding DataContext.Id,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" IsThreeState="False" Click="CheckBox_Click"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>



private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
chk.IsChecked = true;
}


DataGridRow:

<Setter Property="IsSelected" Value="{Binding IsChecked}"></Setter>


qq14923349 2018-01-29
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
将该ischecked 也绑定到model的isselected属性上 ->勾选checkbox导致model的isselected为true,导致行被选中,但是最终触发选中的checkbox而不是行,所以焦点又从行转到了checkbox上。 你把行的isselected绑定到ischecked 上,让行根据checkbox的改变来选中,把model的isselected绑定到checkbox的ischecked属性上。
这个焦点顺序能改变吗
qq14923349 2018-01-29
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
将该ischecked 也绑定到model的isselected属性上 ->勾选checkbox导致model的isselected为true,导致行被选中,但是最终触发选中的checkbox而不是行,所以焦点又从行转到了checkbox上。 你把行的isselected绑定到ischecked 上,让行根据checkbox的改变来选中,把model的isselected绑定到checkbox的ischecked属性上。
但是我的需求有个一个 选中行的时候 行的checkbox又要被勾选 我要实现的是选中该行 ,该行的checkbox被勾上, 勾上checkbox的时候 该行也能高亮
  • 打赏
  • 举报
回复
将该ischecked 也绑定到model的isselected属性上 ->勾选checkbox导致model的isselected为true,导致行被选中,但是最终触发选中的checkbox而不是行,所以焦点又从行转到了checkbox上。 你把行的isselected绑定到ischecked 上,让行根据checkbox的改变来选中,把model的isselected绑定到checkbox的ischecked属性上。
qq14923349 2018-01-29
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
[quote=引用 2 楼 qq14923349 的回复:] 但是我的需求有个一个 选中行的时候 行的checkbox又要被勾选 我要实现的是选中该行 ,该行的checkbox被勾上, 勾上checkbox的时候 该行也能高亮
是的,把行与checkbox关联起来不就可以了么。 有什么问题?[/quote] 我试过了真不行 行和checkbox同绑定model的一个属性有问题, 而按照你说的 在rowstyle里面把row的isselected绑定到ischecked,勾选时行是高亮 但是选中行时勾不上啊 要不你试下你 有demo就更好了
  • 打赏
  • 举报
回复
引用 2 楼 qq14923349 的回复:
但是我的需求有个一个 选中行的时候 行的checkbox又要被勾选 我要实现的是选中该行 ,该行的checkbox被勾上, 勾上checkbox的时候 该行也能高亮
是的,把行与checkbox关联起来不就可以了么。 有什么问题?
东信身份证阅读器机具统信UOS国产系统麒麟990CPU处理器web网页浏览器安装驱动SDK开发包 安装包基础概述 cn.donsee.eserver-2.0.0.1-uos1060-arm64-kirin990-20260608.deb 是东信国产化通用服务端DEB安装包,专为ARM架构国产化终端设备打造,适配统信UOS系统平台,主要用于国产嵌入式终端、国产化办公设备的后台服务部署。软件版本为2.0.0.1,于2026年6月8日编译发布,针对麒麟990硬件平台深度定制优化,运行轻量高效、兼容性稳定,是信创智能终端读卡业务的核心配套组件。 核心功能与应用场景 该服务端主要负责终端后台业务调度、数据采集、设备联动及数据上传,集成全品类卡片读取能力,支持居民身份证、外国人永久居留身份证、港澳台居民居住证、二代/三代社保卡、银行卡、普通居住证,以及M1卡、CPU卡、IC卡、15693卡等各类智能卡识别读取,可满足政务采集、民生核验、身份登记等多场景读卡需求。 产品广泛应用于政务服务、社区采集、国企窗口、基层民生核验等信创场景,解决国产ARM终端读卡适配差、服务不稳定、数据采集异常等问题,依托纯国产化软硬件环境,全程自主可控,保障业务数据安全合规。 东信身份证阅读器机具统信UOS国产系统麒

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧