Go walk中的基本数据绑定

时间:2014-09-20 15:05:49

标签: data-binding go

我试图了解数据绑定在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()
}

1 个答案:

答案 0 :(得分:0)

我在快照中没有看到任何Databinder代码。

在您提到的exanple中,以下代码使数据绑定有效

DataBinder: DataBinder{
            AssignTo:       &db,
            Name:           "animal",
            DataSource:     animal,
            ErrorPresenter: ToolTipErrorPresenter{},
        },

它将调用Bind("Name")的数据绑定到Datasource中具有相同名称的字段,该示例中为animal