我试图了解数据绑定在Go walk中的工作原理。
我已经回顾了有些复杂的data binding example,但是我在实现简单的一个字段数据绑定时遇到了困难。
下面的代码或多或少地展示了我想要实现的目标 - 我希望文本标签绑定到message
变量(即,与其内容同步) - 当然,不需要我可以将更改推送到标签本身。
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"strconv"
"time"
)
func main() {
var messageLabel *walk.Label
var message string = "Hello"
// Change `message` over 5 seconds
go func() {
for i := 1; i < 6; i++ {
time.Sleep(time.Second)
message = "Counting: " + strconv.Itoa(i)
// I want to make it work
// without this line below
messageLabel.SetText(message)
}
}()
// Build a simple window with a text label
// that is supposed to be bound to the
// contents of the `message` variable
MainWindow{
Title: "Binding Test",
MinSize: Size{300, 50},
Layout: VBox{},
Children: []Widget{
Label{
AssignTo: &messageLabel,
Text: message,
// Text: BindTo{message} // Objective
},
},
}.Run()
}
答案 0 :(得分:0)
我在快照中没有看到任何Databinder代码。
在您提到的exanple中,以下代码使数据绑定有效
DataBinder: DataBinder{
AssignTo: &db,
Name: "animal",
DataSource: animal,
ErrorPresenter: ToolTipErrorPresenter{},
},
它将调用Bind("Name")
的数据绑定到Datasource
中具有相同名称的字段,该示例中为animal
。