使用kbmMW实现控件与数据的智能绑定(图像与列表视图)
图像控件与数据集的双向绑定
在VCL与FireMonkey平台中,kbmMW 提供了便捷的数据绑定机制,尤其适用于将图像字段与 TImage 控件进行同步。以下示例展示如何将内存表中的图形数据绑定至 TImage。
首先,通过按钮点击事件加载数据并建立绑定关系:
procedure TForm1.Button8Click(Sender: TObject);
var
mt: TkbmMemTable;
csv: TkbmCSVStreamFormat;
begin
bnd := nil;
Binding.Clear;
if dataset <> nil then
FreeAndNil(dataset);
csv := TkbmCSVStreamFormat.Create(nil);
try
mt := TkbmMemTable.Create(nil);
mt.LoadFromFileViaFormat('biolife.csv', csv);
finally
csv.Free;
end;
dataset := mt;
// 绑定文本字段
Binding.Bind(dataset, 'Category', Edit5, 'Text', [mwboTwoWay]);
Binding.Bind(dataset, 'Species Name', Edit6, 'Text', [mwboTwoWay]);
// 绑定图像字段
Binding.Bind(dataset, 'Graphic', Image1, 'Picture', [mwboTwoWay]);
// 导航至首条记录
if bnd.Navigator <> nil then
bnd.Navigator.First;
end;
执行后,图像控件会自动显示当前记录的图形内容。若使用 FireMonkey 平台,只需将绑定目标改为 Bitmap 属性即可。
手动更新图像并同步到数据源
当需要动态更换图像时,可直接修改控件内容,并主动触发同步通知。例如:
procedure TForm1.btnLoadBitmapClick(Sender: TObject);
begin
Image1.Picture.LoadFromFile('.\samplebitmap.png');
Binding.Changed(Image1, 'Picture'); // 主动通知变更
end;
此处的关键在于 Binding.Changed 方法:由于比较完整位图开销较大,kbmMW 不再自动检测图像变化,而是由开发者显式调用该方法来触发数据源更新。
ListView 的智能绑定支持
TListView 在不同平台上的行为略有差异,但绑定逻辑高度一致。通过扩展语法,可精确控制每一项或列的显示内容。
基础绑定示例(默认图标视图):
Binding.Bind(dataset, 'Category', ListView2, '#caption');
Binding.Bind(dataset, '@', ListView2, '@', [mwboTwoWay]);
此设置使得点击列表项时,数据集自动跳转至对应记录,相关编辑框也实时更新。
支持的绑定属性语法
使用 # 前缀可绑定子项属性,常见选项包括:
#caption:项标题#image:图像资源#checked:选中状态
在 VCL 的 vsReport 模式下,可通过 #0 到 #999 索引绑定指定列:
Binding.Bind(dataset, 'Species Name', ListView2, '#0');
Binding.Bind(dataset, 'Common_Name', ListView2, '#1');
FireMonkey 动态布局绑定
FireMonkey 的 TListView 支持自定义项外观。通过启用设计模式,在设计器中添加文本、图像等组件后,可直接绑定字段:
Binding.Bind(dataset, 'Common_Name', ListView2, '#Text1');
Binding.Bind(dataset, 'Graphic', ListView2, '#Image2');
Binding.Bind(dataset, 'Species Name', ListView2, '#Text3');
运行结果将根据绑定配置动态渲染每行内容,实现灵活的多字段展示。
