我在Delphi XE5中编写了一个FMX metropolis应用程序,并在数据源和TListBox的同步中遇到了错误。它正常工作,直到有一个组合一个或多个项目的组头。选择组中ListBox
(ListItemStyle
= MetropolisUI
)的第一项会导致它从列表中消失(它变得不可见,这不会影响数据集本身)。 / p>
object LinkListControlToField1: TLinkListControlToField
Category = 'Quick Bindings'
DataSource = BindSourceDB1
FieldName = 'name2'
Control = ListBox1
FillExpressions = <
item
SourceMemberName = 'photo_mini'
ControlMemberName = 'Icon'
end
item
SourceMemberName = 'diagnosis_short'
ControlMemberName = 'Description'
end
item
ControlMemberName = 'Title'
CustomFormat = 'self.owner.name1.text+" "+self.owner.name2.text'
end>
ListItemStyle = 'MetropolisUI'
AutoBufferCount = False
FillHeaderExpressions = <>
FillBreakFieldName = 'ward'
FillHeaderCustomFormat = '"Ward "+ward.text'
FillBreakGroups = <>
end
end
我用来重现错误的以下简化项目是以不同的方式起作用,但问题的问题几乎相同。我们只需要一个包含PrototypeBindSource1: TPrototypeBindSource;
(生成文字和整数字段),BindingsList1: TBindingsList; ListBox1: TListBox;
和Edit1: TEdit;
的表单。这是LiveBindings链接:
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkListControlToField1: TLinkListControlToField
Category = 'Quick Bindings'
DataSource = PrototypeBindSource1
FieldName = 'ContactName1'
Control = ListBox1
FillExpressions = <>
AutoBufferCount = False
FillHeaderExpressions = <>
FillHeaderFieldName = 'UIntField1'
FillBreakGroups = <>
end
object LinkControlToField1: TLinkControlToField
Category = 'Quick Bindings'
DataSource = PrototypeBindSource1
FieldName = 'ContactName1'
Control = Edit1
Track = False
end
项目的选择与DataSource(DataSet)中所选记录的ID不对应。似乎LiveBindings引擎同步ItemIndex
的{{1}}属性,但不同步所选记录的真实TListBox
。有没有正确的方法来解决这个问题?
答案 0 :(得分:0)
我尝试使用实时绑定,但发现当你从琐碎的事物转移到现实世界中时,你必须跳过的箍使其工作不值得努力。我想这是一个很好的例子。当你正在做他们想到的&#39; (1项= 1条记录)事情很好但是一旦你离开它就不能再使用快速绑定了,必须开始构建自己的自定义绑定类,这需要比Quick Bindings更深入地理解实时绑定,并且在我的视图有点击败了练习的对象。
因此,除非你想坚持简单的做事方式,否则我认为没有简单的答案。
在我的情况下,我使用的是XE2,我不知道XE5中的事情发生了很多。