绑定到嵌套属性仅显示列表中的第一项

2024-01-03

我正在尝试将 .NET 4.5 中的 C# Winforms 中的 ListBox 控件绑定到具有我希望用于 DisplayMember 的嵌套属性的对象列表。它有点有效,除了当我将 DisplayMember 设置为嵌套属性时,列表框仅显示一项,即使列表中有两项它绑定到。如果我注释掉用于设置 DisplayMember 的代码,列表框将显示两个项目。这是框架中的错误吗?如果可以的话,我希望避免添加另一个属性或覆盖 ToString(),因为我正在实现 MVP,并且希望将视图逻辑与视图隔离。下面是一些示例代码。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        var bindingSource = new BindingSource();
        var listOfMyItems = new BindingList<MyItem>
        { 
          new MyItem { Number = 1, NestedItem = new NestedItem { Name = "name1", Note = "note1" } },
          new MyItem { Number = 2, NestedItem = new NestedItem { Name = "name2", Note = "note2" } },
        };
        bindingSource.DataSource = listOfMyItems;
        listBox1.DataSource      = bindingSource;
        //comment out the line below and the listBox1 will show 2 items
        listBox1.DisplayMember   = "NestedItem.Name";
    }
}
public class NestedItem
{
    public string Name { get; set; }
    public string Note { get; set; }
}
public class MyItem
{
    public NestedItem NestedItem { get; set; }
    public int Number { get; set; }
}

好像是这样设置的DisplayMember仅显示“NestedItem.Name”NestedItem.Name的财产SelectedItem -我测试了这个,如果SelectedItem改变,显示的Name也会相应改变-.最简单的解决方法是为 DisplayMember 添加另一个属性 https://stackoverflow.com/a/440808/2998271 :

public class MyItem
{
    public NestedItem NestedItem { get; set; }
    public int Number { get; set; }
    public String NestedItemName { get { return NestedItem.Name; } }
}

然后设置DisplayMember :

listBox1.DisplayMember   = "NestedItemName";

不优雅,但仍然比建议的使用属性描述符更容易here https://stackoverflow.com/a/4217317/2998271 or here https://stackoverflow.com/a/4273975/2998271.

UPDATE :

以下是我所做的快速测试。添加一个按钮来切换listBox1's DisplayMember. Onclick事件处理程序:

listBox1.DisplayMember = (listBox1.DisplayMember == "Number") ? "NestedItem.Name" : "Number";

when DisplayMember设置为“数字”,您可以选择列表中的任何项目 -不一定是第一项-,然后再次单击该按钮。你会看到SelectedItem's NestedItem.Name显示。

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

绑定到嵌套属性仅显示列表中的第一项 的相关文章

随机推荐

  • 在 x86 上处理非常大的列表

    我需要处理大量浮点数 但在 x86 系统上遇到了内存限制 我不知道最终的长度 所以我需要使用可扩展类型 在 x64 系统上 我可以使用
  • 如何删除除每小时一条记录之外的所有记录

    我有一个包含数百万条传感器记录的 mysql 表 其结构如下 datanumber auto increment stationid int sensortype int measuredate datetime data medtext
  • TPL Dataflow,Post() 和 SendAsync() 之间的功能区别是什么?

    我对通过 Post 或 SendAsync 发送项目之间的区别感到困惑 我的理解是 在所有情况下 一旦一个项目到达数据块的输入缓冲区 控制权就会返回到调用上下文 对吗 那么为什么我需要 SendAsync 呢 如果我的假设不正确 那么我想知
  • 在 R 中使用 t.test() 时出错 - 没有足够的“x”观测值

    我尝试进行 t test 但它给了我这样的错误 在 R 中使用 t test 时出错 没有足够的 x 观察值 数据只有数值 没有 NA 组的比例是10比35 如何避免这种情况 先谢谢您的帮助 t test data Vrajdeb data
  • spring tx:advice和spring aop切入点的区别

    我是 Spring 新手 具有 Hibernate 的工作知识 我的工作是使用 Spring 声明式方法来实现事务 在 Google 的帮助下我成功完成了 感谢 Google 但无法清楚地理解我在 application context x
  • 如何正确配置 Julia 便携式或独立式

    如何正确配置Julia 便携式或独立式 https julialang s3 julialang org bin winnt x64 1 5 julia 1 5 0 win64 zip 对于外部存储 USB 驱动器发生的一切 添加 更新软件
  • libpcap 还是 PF_PACKET?

    我知道这个问题已经讨论过很多次了 我应该使用 libpcap 还是 PF PACKET 数据链路套接字 来捕获数据包 根据我的研究 几乎所有地方都建议使用 libpcap 而不是 PF PACKET 主要是因为它的可移植性 然而 对于我当前
  • 替换 Flutter 中的片段等小部件

    我是颤振新手 我有一个带有 2 个子小部件 Android 中的 2 个片段 的应用程序 当我单击 WidgetA 中的下一个按钮时 我想将该小部件替换 或推送 到 WidgetChildA 中 就像 Android 中的推送 或替换 片段
  • 什么开源消息队列软件可以提供严格排序的耐用性?

    我们需要的是实际上作为队列工作的 RabbitMQ并且不这样做 http www rabbitmq com faq html message ordering 消息应该保留在队列的头部 直到客户端明确地将它们出队 这似乎是一个非常简单的场景
  • Asp Net Core Web 推送通知

    主要目标是向站点添加发送 Web 通知的功能 以弹出系统通知 以使用 Html5 Push API 和服务工作人员提醒用户 不使用 SignalR 它只能在打开站点时运行客户端脚本 如前所述 还应该能够在网站关闭时发送通知here http
  • CMake - 在 Linux 中编译,在 Windows 中执行

    我有一个具有 Linux 依赖项的大型代码库 我想使用 CMake 将我的代码编译成可以在 Windows 上运行的可执行文件 即我希望 CMake 生成一个 exe 文件或类似性质的文件 我尝试过使用CMake网站上提供的解决方案 htt
  • Android Studio 本身不显示“数据库检查器”

    我使用的是4 2版本 这是Android Studio的最新版本 正如文档中所述 我在 视图 gt 工具窗口 中搜索了数据库检查器 但它没有出现在那里 我如何找到数据库检查器 任何帮助将不胜感激 Thanks in advance 我刚刚解
  • 为什么 doctests 在使用 Sphinx 的 `make doctest` 运行时会引发 NameError?

    我有一个简单的带有 doctest 的函数 http git io Tq2fTw 当与 Sphinx 一起运行时make doctest 给我以下错误 File scheemey rst line in default Failed exa
  • CodeIgniter头像上传

    这是新的 HTML
  • 将参数作为 std::string 或 const std::string& 传递? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中 按值传递还是按常量引用传递更好 https stackoverflow com questions 270408 is it better in c to pass by value or
  • 在这种情况下我可以忽略 C4251 警告吗?

    我明白为什么在编译代码时出现 C4251 警告 如中所述here http msdn microsoft com en us library esew7y1w aspx 我的问题是 如果可访问的导出类成员来自 STL 我们可以忽略 C425
  • 在所有网页上保留我的页眉和页脚?

    我已经完成了网站主页的设计 现在已经开始处理其他一些页面 我希望页眉和页脚在每个页面上显示相同 我已经尝试过这种基本方法来链接构成第二个 HTML 文件中的页眉 页脚的相同样式表 已在主页中使用 我现在明白这是行不通的 服务器端脚本语言是我
  • 向后台脚本发送消息

    我正在尝试实现一个屏幕共享 Web 应用程序 该应用程序将使用desktopCapture Chrome API 在网页上显示用户屏幕 我已经创建了 chrome 扩展 并在后台运行了一个事件侦听器 我的问题是 当我尝试从网页向扩展程序发送
  • 为什么布尔字段在 Hive 中不起作用?

    我的配置单元表中有一个数据类型为布尔值的列 当我尝试从 csv 导入数据时 它存储为 NULL 这是我的示例表 CREATE tABLE if not exists Engineanalysis EngineModel String Eng
  • 绑定到嵌套属性仅显示列表中的第一项

    我正在尝试将 NET 4 5 中的 C Winforms 中的 ListBox 控件绑定到具有我希望用于 DisplayMember 的嵌套属性的对象列表 它有点有效 除了当我将 DisplayMember 设置为嵌套属性时 列表框仅显示一