Skip to content
On this page

列表数据

为了演示如何连接更复杂的类型,我们将查看List小部件以及数据绑定如何使其更易于使用。首先,我们创建一个StringList数据绑定,它是一个String数据类型的列表。一旦我们有了列表类型的数据,我们就可以将其连接到标准的list小部件。为此,我们使用widget.NewListWithData构造函数,就像其他小部件一样。

将此代码与列表教程进行比较,您将看到两个主要变化,第一个是我们将数据类型作为第一个参数传递,而不是长度回调函数。第二个更改是最后一个参数,即UpdateItem回调。修订版本采用binding.DataItem值而不是widget.ListIndexID。使用此回调结构时,我们应该绑定到模板标签小部件,而不是调用SetText。这意味着,如果数据源中的任何字符串发生更改,表中受影响的每一行都将刷新。

go
package main

import (
	"fmt"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/data/binding"
	"fyne.io/fyne/v2/widget"
)

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("List Data")

	data := binding.BindStringList(
		&[]string{"Item 1", "Item 2", "Item 3"},
	)

	list := widget.NewListWithData(data,
		func() fyne.CanvasObject {
			return widget.NewLabel("template")
		},
		func(i binding.DataItem, o fyne.CanvasObject) {
			o.(*widget.Label).Bind(i.(binding.String))
		})

	add := widget.NewButton("Append", func() {
		val := fmt.Sprintf("Item %d", data.Length()+1)
		data.Append(val)
	})
	myWindow.SetContent(container.NewBorder(nil, add, nil, nil, list))
	myWindow.ShowAndRun()
}

在我们的演示代码中,有一个“追加”按钮,当点击它时,它将向数据源追加一个新值。这样做将自动触发数据更改处理程序并展开List小部件以显示新数据。