WPF:XAML 中的绑定列表 - 项目如何知道其在列表中的位置?

2023-11-27

给定以下具有 ListControl 类似行为的 XAML 代码:

    <StackPanel>
        <ItemsControl Name="_listbox" ItemsSource="{Binding ElementName=_userControl, Path=DataContext}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <DockPanel>
                         ...
                    </DockPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>

由于列表可能很长(100-200 个项目),并且这些项目看起来很相似,因此我认为如果每个项目都显示其在列表中的位置,那么在滚动过程中会对用户有所帮助。模板中的项目如何知道自己在列表中的位置?


这是一个黑客解决方案。我们可以将值转换与数据绑定结合使用。所以第一步是声明我们的 ValueConvertor:

public class ListItemToPositionConverter : IValueConverter
    {
        #region Implementation of IValueConverter

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var item = value as ListBoxItem;
            if (item != null)
            {
                var lb = FindAncestor<ListBox>(item);
                if (lb != null)
                {
                    var index = lb.Items.IndexOf(item.Content);
                    return index;
                }
            }
            return null;
        }            

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

在您想要此静态方法的任何位置声明以获得 ListBox 父级:

public static T FindAncestor<T>(DependencyObject from) where T : class
        {
            if (from == null)
                return null;

            var candidate = from as T;
            return candidate ?? FindAncestor<T>(VisualTreeHelper.GetParent(from));
        }

然后在 ListBox.Resources 中声明我们的转换器,如下所示:

<ListBox.Resources>
                <YourNamespace:ListItemToPositionConverter x:Key="listItemToPositionConverter"/>
            </ListBox.Resources>

最后 - 数据模板:

<ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Converter={StaticResource listItemToPositionConverter}}"/>
                        <Label Content="{Binding Path=DisplayName}"></Label>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

Note:在此示例中,项目将从 0(零)开始编号,您可以在 Convert 方法中通过向结果添加 1 来更改它。

希望这可以帮助...

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

WPF:XAML 中的绑定列表 - 项目如何知道其在列表中的位置? 的相关文章

  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • Python列表内存存储[重复]

    这个问题在这里已经有答案了 据我了解 Python 列表本质上是 C 数组 它们分配特定的顺序内存块 但是 这些内存块实际上存储列表中的数据还是它们只是指向内存中存储实际数据的另一个位置 它可能取决于列表中存储的对象的大小吗 因为您可以轻松
  • 如何循环访问 WPF StackPanel 静态项目?

    可能很容易 但我很难弄清楚这一点 谷歌似乎也没有多大帮助 如何循环遍历 StackPanel 的静态声明元素 无数据绑定 元素在 xaml 中声明 任何帮助表示赞赏 你的意思是StackPanel的孩子们 foreach var child
  • 按属性对对象列表进行排序 C#

    我有这门课 public class Leg public int Day get set public int Hour get set public int Min get set 我有一个获取腿列表的函数 称为 GetLegs Lis
  • WPF 组合框如果只有 1 项则自动选择

    我有一个组合框 我绑定到一个可观察的集合 它会发生变化 根据选择的公司 并且大量公司将有一个帐户 项目 因此我想知道制作组合框的最佳方法是什么如果 ItemsSource 中只有 1 个项目 则设置 SelectedItem 否则将其保留为
  • 如何显示在 Emacs 中 hippie-expand 命令创建的所有可能的补全?

    我想列出所有项目hippie expand创建 然后通过移动光标并按 RET 键从中进行选择 有什么办法可以做到这一点吗 这是我为此目的使用的 global set key kbd M i complete with helm requir
  • 如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

    我需要在 AvalonDock 2 0 中加载项目集合作为文档 这些对象继承自一个抽象类 我想根据哪个子类在文档中渲染一个框架 这是我的 XAML
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • 查找字典中列表的最大值

    我有一个字典 每个键后面都有一个存储的列表 看起来像这样 dict with values u New York u New York u NY datetime datetime 2014 8 13 0 0 10 u New York u
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 将 NameValueCollection 绑定到 GridView?

    我应该使用哪种集合来将 NameValuecollection 转换为可绑定到 GridView 直接做的时候没效果 aspx cs 中的代码 private void BindList NameValueCollection nvpLis
  • 将嵌套列表转换为嵌套列表

    我知道可以将项目列表从一种类型转换为另一种类型 但是如何将嵌套列表转换为嵌套 List 已经尝试过的解决方案 List
  • 如何在 RichTextBox 中以编程方式移动插入符位置?

    我有一个 RichTextBox 其中的特殊文本位具有自定义格式 但是 存在一个错误 即插入字符后 插入符号会放置在新插入的字符之前而不是之后 这是因为对于每次编辑 代码都会重新计算内容以应用自定义格式 然后像这样设置 CaretPosit
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • WPF HierarchicalDataTemplate 不会在属性更改时更新 ItemsSource

    这是一些 XAML
  • 按钮的样式看起来像应用栏按钮

    是否可以通过更改样式来将 xaml 按钮标记设置为看起来像应用程序栏按钮 以及如何才能做到这一点 希望这可以帮助
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况

随机推荐

  • vue-router 总是创建一个新的 Component 实例

    我在 vue router 中发现了一个问题 这让我很受触动 当我在路由之间切换时 总是会创建组件的新实例 此外 旧实例不会被删除并在后台运行 我希望当我打开一条路线时 旧组件将被销毁或停止运行 有解决方法来解决这个问题吗 这是一个小提琴
  • XAPK 文件验证显示正确的数据信息

    在运行 APK 扩展文件示例时 我只是跳过了检查 CRC32 以避免 crc bug 算法 并且它工作得非常好 但是 虽然 XAPK 文件验证显示正确的下载数据信息为 99 如何避免这种情况并通过硬编码查看完整的 100 这不是最好的解决方
  • 仅选择启动首选项复选框中的一个复选框

    我的应用程序启动取决于用户偏好 具有三个不同的复选框 1 启动应用程序 没有启动画面和音乐 2 仅使用启动画面启动应用程序 3 启动带有启动画面和音乐的应用程序 使用下面的代码可以完美地工作 但仍有两点需要实现 FIRST只应选中一个复选框
  • Git 中的 tree-ish 是什么意思?

    我很困惑如何使用git archive 我有一个带有文件夹的 git 存储库Foo Bar and Baz在顶层 我需要导出文件夹Foo以类似 SVN 的方式进行快速测试部署 我了解到我可以使用git archive in an 类似 SV
  • Get-ChildItem 无法找到路径,因为它不存在

    我正在编写一个脚本来获取网络中所有共享的 ACL 我正在三个独立的 UNC 路径上运行它 三者中的两个工作正常 返回所有子项目和权限等 但是 第三个 UNC 路径返回以下错误 Get ChildItem Cannot find path s
  • 将十进制向量转换为二进制向量

    我需要将十进制数转换为二进制向量 例如 这样的事情 length de2bi length field 16 不幸的是 由于许可的原因 我无法使用此命令 是否有任何快速的简短技术可以将二进制转换为向量 这就是我正在寻找的 If Data 1
  • Spring ResponseEntity:使用构造函数还是静态构建器?

    在 Spring Boot RestController 中 我使用 springframework 类响应实体返回端点调用的响应 我最近发现有两种方法可以实例化这个类 使用构造函数 response new ResponseEntity
  • 使用 PowerShell 远程运行 Java

    当我跑步时电源外壳在远程会话中 etsn servername 我有时似乎无法运行Java进程 即使是最简单的 chi queuing PS C temp gt java cp hello jar Hello Error occurred
  • 不提示使用 OAUth2 重新进行身份验证。为什么以及如何强制它?

    我想了解一些事情 我有一个基于 oAuth2 和 Google 帐户的应用程序 因此 当我第一次连接到该网站时 我会被重定向到 Google 域上的身份验证页面 因此 我输入我的电子邮件和密码 但没有选中 受信任的计算机 或 记住我 我不记
  • 去除QComboBox listView阴影效果

    默认情况下 QComboBoxlistview有阴影效果 有办法去除吗 阴影是否由QStyle或者以其他方式 阴影效果不是 Qt 特定的东西 它是桌面主题特定的东西 阴影取决于您的桌面环境使用的样式 主题 如果您的样式 主题定义了 QCom
  • 使用java创建XML文件

    如何使用java创建一个xml文件并将其保存在我的机器中的某个位置 xml文件中还包含属性 我找到了 org w3c dom Document 但在为元素创建属性和保存 xml 文件时遇到问题 谢谢 您可以使用 DOM XML 解析器通过
  • MongoDB 使用外键将字段复制到另一个集合

    我想将颜色从用户集合复制到汽车集合 我使用的是外键 即 userID gt db test1 User find id ObjectId 515f7db83f71d6bcb1c41a48 age 33 Color blue id Objec
  • 什么时候应该使用 UserControl 而不是 Page?

    我注意到许多 WPF MVVM 框架似乎避免使用 NavigationWindow 和 Page 控件 而转而使用嵌套的 UserControls 来编写页面 NavigationWindow 和 Page 提供了在日志中启用后退和前进导航
  • 一对一:未定义的方法构建

    一对一关系有问题 我有一些比赛 我想为一场比赛获得一个分数 我的比赛 rb has one score dependent gt destroy 我的分数 rb belongs to match 我的 Scores controller r
  • 重新审视 Firefox 按钮行高错误...2011 年有任何解决方案吗?

    The Firefox行高错误是一个痛苦 简而言之 它可以防止手动设置line height on button通过浏览器样式的元素line height normal important不可撤销的声明 现在这是一个巨大的痛苦 幸运的是 在
  • 如何在 java/JDBC 中取消 postgres 查询

    如何通过 JDBC 或 Java 取消长时间运行的 postgres 查询 用例是用户在 postgres 数据库上启动查询 通过前端 但随后他又做出了决定并想要 中止 取消当前正在运行的查询 Call java sql PreparedS
  • Android 库项目中的 R.java 文件未导入到应用程序项目中

    我按照此处有关如何创建 Android 库项目并在 Android 应用程序中使用它的说明进行操作 http developer android com guide developing eclipse adt html 但它不起作用 我可
  • Visual Studio:将 C# 代码导出到 PDF 文件并保留格式和颜色?

    我想知道里面有没有导出功能Visual Studio Ultimate 2010 得到一个选择tab 默认情况下单个class of C code导出到一个PDF文件 以便您可以共享该 PDF 文件并向其他人展示代码以及 Visual St
  • 在sql server中参数化全文查询

    我在使用 sql server 全文功能时遇到问题 我正在将一些论坛软件转换为使用全文搜索 并且我已完成所有设置并正常工作 我的问题与全文查询有关 我设计了一些查询 当我使用 CONTAINS 谓词在 sql server manageme
  • WPF:XAML 中的绑定列表 - 项目如何知道其在列表中的位置?

    给定以下具有 ListControl 类似行为的 XAML 代码