列表数据
为了演示如何连接更复杂的类型,我们将查看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小部件以显示新数据。