Fyne 系列 07:数据绑定与状态管理
cbowen

简单界面里,可以直接读取控件值。界面变复杂后,数据绑定能减少手动同步,让控件和数据状态保持一致。

字符串绑定

1
2
3
4
5
name := binding.NewString()
name.Set("Fyne")

entry := widget.NewEntryWithData(name)
label := widget.NewLabelWithData(name)

输入框修改后,label 会自动更新。代码里修改 name,界面也会跟着刷新。

1
name.Set("Go GUI")

读取值:

1
2
3
4
5
value, err := name.Get()
if err != nil {
return
}
fmt.Println(value)

布尔和数字

1
2
enabled := binding.NewBool()
check := widget.NewCheckWithData("启用功能", enabled)

数字可以用 binding.NewFloat()binding.NewInt(),常见于滑块、进度、计数器。

列表绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
items := binding.NewStringList()
items.Set([]string{"main.go", "go.mod"})

list := widget.NewListWithData(
items,
func() fyne.CanvasObject {
return widget.NewLabel("")
},
func(item binding.DataItem, obj fyne.CanvasObject) {
text, _ := item.(binding.String).Get()
obj.(*widget.Label).SetText(text)
},
)

列表内容变化时,绑定对象会通知控件刷新。

什么时候使用绑定

如果只是按钮点击后读取一次输入框,直接 entry.Text 更简单。如果多个控件共享同一份状态,或者数据会被后台任务更新,绑定会更清晰。

实践里可以把业务状态放在结构体里,界面状态用 binding 暴露给控件。这样既不会把业务逻辑塞进按钮回调,也不会让界面刷新散落在各处。

 评论
评论插件加载失败
正在加载评论插件