列表框“IsSelected”绑定仅部分工作

2023-11-24

我有一个ListBox我通过绑定动态填充(这是在DataTemplate,这就是绑定有些不寻常的原因):

<ListBox SelectionMode="Extended" ItemsSource="{Binding DataContext.ResultList, RelativeSource={RelativeSource AncestorType=Window}}">
  <ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
      <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
    </Style>
  </ListBox.ItemContainerStyle>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Label Content="{Binding Object}"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Each ListBoxItem's IsSelected属性绑定到IsSelected自定义对象上的属性。

当我选择个人时ListBoxItem是,绑定工作正常 - 自定义对象IsSelected属性在我的 ViewModel 中更新。但是,如果我选择所有ListBoxItem使用 Ctrl+A 命令,仅当前可见ListBoxItems(当前位于我的滚动视口中的那些)更新其 ViewModel 绑定。在前端,所有ListBoxItems 似乎已被选中,并且ListBox.SelectedItems.Count容器上的属性ListBox显示所有项目都被选中。

此外,当我滚动浏览ListBox选择全部后ListBoxItem使用 Ctrl+A 时,每次更新绑定都会成功ListBoxItem已滚动到视图中。

为什么这个绑定似乎只部分起作用?有没有更好的方法来处理绑定IsSelected当大量财产ListBoxItems可以同时选择吗?

Edit:此行为不仅仅发生在使用 Ctrl+A 命令时 - 当使用 Shift+单击选择所有项目时,我得到相同的结果。


我认为你所看到的行为是由于VirtualizingStackPanel.IsVirtualizing这是True绑定时默认ItemsSource of ListBox

如果你例如设置你的ListBox例如:

<ListBox VirtualizingStackPanel.IsVirtualizing="False" SelectionMode="Extended" ItemsSource="{Binding DataContext.ResultList, RelativeSource={RelativeSource AncestorType=Window}}">

or

<ListBox ...>
  ...
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel />
    </ItemsPanelTemplate>
  </ListBox.ItemsPanel>
</ListBox>

那么你应该看到所有绑定的物品都有它们的IsSelected使用 Ctrl+A 或 Shift + ... 进行相应更新

属性如Count即使使用虚拟化,集合的也会报告正确的值以适应诸如计算所需的内容之类的事情ScrollBar.Height。视口之外的项目不会被渲染,因此在实际使用它们之前,任何绑定都不会对其生效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表框“IsSelected”绑定仅部分工作 的相关文章

随机推荐

  • Grails 文件上传问题

    我正在尝试模拟 grails 网站的文件上传代码 但遇到了一些问题 我使用的代码与找到的相同here 这是我的代码
  • 从外部调用 React 组件方法

    我想从 React 元素的实例调用 React 组件公开的方法 例如 在这个jsfiddle 我想打电话给alertMessage方法从HelloElement参考 有没有一种方法可以实现这一点而无需编写额外的包装器 Edit 从 JSFi
  • XSLT 样式表用空的配对标签替换自关闭标签

    我正在使用 XSLT 处理 ASP Net web config 文件以插入一些额外的 log4net 配置 它由称为 NANT 标准任务的应用
  • Firebase Unity3D 桌面应用程序 (Mac/PC) - 是否有效?

    Firebase 在此处的文档中 文件 A https firebase google com docs unity setup 它声称它现在适用于桌面版本 因此 您可以统一创建 Mac 应用程序或 Windows 应用程序 它确实可以在
  • 动态单选按钮控制

    代码 private void createRadioButton final RadioButton rb new RadioButton 5 for int i 0 i lt 5 i rb i new RadioButton this
  • 实体框架:单例 ObjectContext - 好、坏还是想太多?

    这个想法是创建一个公开上下文但处理它在 Web 应用程序中的存储的类 目前 这就是我所拥有的 public class EntityContext private static String MAIN CONTEXT KEY MainCon
  • GAE/J 请求日志格式细分

    以下是 GAE 控制台日志记录的示例 https i stack imgur com M2iJX png for readable high res version 我想提供文件的详细信息 显示在折叠 摘要 视图和展开 详细 视图中 我将填
  • 有人成功构建了 Cygwin 版本的 GHC 吗?

    有没有人成功构建了 GHC 的 Cygwin 版本 自从 Haskell 从使用 Cygwin 切换到 MinGW 来自哈斯克尔网站 GHC 的目标是 MinGW 而不是 Cygwin 原则上可以构建一个针对 Cygwin 的 GHC 版本
  • 将 HTML 源代码保存到文件

    如何在 Python 3 中将网站的源代码复制到文本文件中 编辑 为了澄清我的问题 我有以下内容 import urllib request def extractHTML url f open temphtml txt w page ur
  • malloced 数组 VS.malloced 数组可变长度数组[重复]

    这个问题在这里已经有答案了 有两种方法可以为数组分配内存 数组的大小一开始是未知的 最常见的方法是使用malloc像这样 int array when we know the size array malloc size sizeof in
  • 无法从“node_modules/expo/AppEntry.js”解析“../../App”

    我正在用 expo 制作一个 vue 原生应用程序 升级到 expo 版本 33 时 出现以下错误 无法从 node modules expo AppEntry js 解析 App 需要升级到版本 33 是 因为我需要 expo 文件系统模
  • 使用 LLVM 进行源到源编译[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要将 x86 汇编源代码转换为 LLVM 人类可读的 ll 文件 又名 LLVM 汇编语言 我怎样才能做到这一点 如果没有直接的解决方案 是否有
  • 将 json 提交到 MVC3 操作

    我有一个用 Knockout js 创建的表单 当用户按下提交按钮时 我将视图模型转换回模型并尝试提交到服务器 我试过 ko utils postJson location href ko toJSON viewModel 但该对象在到达服
  • 如何在 MySQL 上正确循环存储函数?

    我在正确执行一个非常简单的存储过程时遇到了一些困难 考虑以下文章表片段 id replaced by baseID 1 2 0 2 3 0 3 0 0 一个简单的分层表 使用写时复制 编辑文章时 当前文章的 Replaced by 字段将设
  • 为 Rest 客户端设置 Json 内容类型

    我正在使用用于 Android 的 Loopj 的 AsyncHttpClient 以便我可以与我创建的安静的 Web 应用程序进行交互 我已经使用 Postman 测试了 POST 请求 效果很好 然而 在 Android 中 我很难执行
  • 为什么我的 HashMap 允许重复键?

    嘿 我正在使用HashMap在公告板上跟踪服务和服务请求 但是 我的哈希码和等于错误 因为我得到了重复的键 谁能告诉我为什么会这样吗 keySet的内容 Services 1 1 6 6 3 Requests 8 7 6 5 8 4 5 6
  • 如何重置 CURLOPT_CUSTOMREQUEST

    我正在使用 REST API 除其他外 它使用DELETE像这样的方法 DELETE resources whatever items 123 为了使用 PHP 访问它 我使用 cURL 如下所示 self curl curl init c
  • Hashmap put(),它总是有序的吗?

    当我们将值添加到hashmap
  • 为什么 LINQ JOIN 比 WHERE 链接快得多?

    我最近升级到 VS 2010 并正在使用 LINQ to Dataset 我有一个用于授权的强类型数据集 位于 ASP NET Web 应用程序的 HttpCache 中 所以我想知道检查用户是否有权执行某些操作的最快方法是什么 Here是
  • 列表框“IsSelected”绑定仅部分工作

    我有一个ListBox我通过绑定动态填充 这是在DataTemplate 这就是绑定有些不寻常的原因