数据绑定databinding


前言

fyne提供了强大的数据绑定组件,可以增强操作体验和组件的动态树的刷新。


一、Entry的绑定

1. 所见即所得

bd := binding.NewString()
	lbl := widget.NewLabelWithData(bd)
	input := widget.NewEntryWithData(bd)

因为Entry组件和Label组件都是引用的字符串绑定组件,当在Entry输入内容时,同时label的内容也会发生改变。

2. 监听

我们也可以给绑定组件设置监听,当数据有变化时,我们将其显示在普通的label上。

// 监听 label
	listenLbl := widget.NewLabel("")

	// 给label添加监听方法
	bd.AddListener(binding.NewDataListener(func() {
		s, err := bd.Get()
		if err != nil {
			fyne.LogError("get err", err)
			return
		}
		listenLbl.SetText(s)
	}))

二、List

1.创建

代码如下(示例):

sl := binding.NewStringList()
	l := widget.NewListWithData(sl, nil, nil)

	//创建list item,使用label
	l.CreateItem = func() fyne.CanvasObject {
		return widget.NewLabel("")
	}

	// 更新项目
	l.UpdateItem = func(id widget.ListItemID, item fyne.CanvasObject) {
		// 获取Item值
		di, _ := sl.GetValue(id)

		if l2,ok := item.(*widget.Label);ok{
			l2.SetText(di)
		}
	}

以上是一个字符串类型的List ,我们通过按钮事件往List里添加数据:

i := 0
	btn := widget.NewButton("添加", func() {
		sl.Append("item " + strconv.Itoa(i))
		i++
	})

在这里插入图片描述

三、绑定结构体

dog:= &Dog{"lucky",2}
	bs:= binding.BindStruct(dog)

	lblDog:= widget.NewLabel("")
	dogBtn:= widget.NewButton("绑定Dog",func() {
		// 获取Name
		iname, _ := bs.GetValue("Name")
		if name,ok:=iname.(string);ok{
			lblDog.SetText(name)
		}
	})

在这里插入图片描述


总结

fyne内置了很多组件的数据绑定,大家可以多实践,可以扩展更加强大的功能。

附录

源代码: https://gitee.com/gene-zhao/fyne-demo.git
更多高级用法,持续更新...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值