【发布时间】:2012-02-23 04:56:14
【问题描述】:
我是一个使用页面的向导式应用程序,用户可以通过“下一个”和“上一个”按钮在它们之间导航,也可以使用导航栏直接访问某些页面。
在一页(我将其称为“网格页”)上,我有一个绑定到 DataTable 的 DataGrid。 DataTable 中有一些初始数据,但使用 DataGrid,用户可以根据需要添加、编辑和删除行。 在下一页(我称之为“组合框页面”)有一个 ComboBox,它与网格页面上的 DataGrid 绑定到相同的 DataTable。 两个页面都使用相同的对象作为数据上下文。
如果我直接跳到组合框页面,一切正常,组合框在 DataTable 中的每一行都有一个条目,就像它应该的那样。现在我导航到网格页面并且没有触摸那里的任何东西,然后再次转到组合框页面。现在 ComboBox 显示一个新项目,一个 NewItemPlaceholder。显然,这是因为 DataGrid 将 UserCanAddRows 设置为 true,因此会为新项目显示占位符行。但这应该只涉及 DataGrid 而不是绑定的 DataTable,所以在我看来这是一个错误,或者至少是一个绝对可怕的设计。
当然,我不想在我的 ComboBox 中使用 NewItemPlaceholder(选择它会导致很多问题)。那么如何防止它显示在 ComboBox 中呢?
更新:与此同时,我发现占位符项目不在 DataTable 中作为一行,这使得它更加奇怪,除非 DataTable 中有一个标志显示“此表中有一个 NewItemPlaceholder”但是本身不是一行。此外,当我注册到 ComboBox 的 Initialized 事件时,我有 2 个我正在寻找的项目,当我注册到 Loaded 事件时,我也有 NewItemPlaceholder,因此必须在这两个事件之间添加它。
【问题讨论】:
标签: wpf binding datagrid combobox datatable