0

根据文档,kotlin var 属性可以在 ViewModel 中绑定为

    // Kotlin var property
class PersonVarViewModel(person: Person) : ViewModel() {
    val name = bind { person.observable(Person::name) }
}

好像不行啊 如何解决这个问题。IDE在“绑定”下方显示红色下划线,但如果我写

   val name = bind(RoomType::name)

它没有显示错误。但是使用 UI 字段更新值不会更新模型值。请帮忙

4

2 回答 2

1

在你的类声明中,使用var person: Person.

person需要是类的成员,而不仅仅是构造函数的参数。您可以通过声明它varval在构造函数参数中执行此操作,或者您可以以常规方式将成员字段添加到类并分配它(可能使用by property,但不确定这是否是您想要的)

class PersonVarViewModel(var person: Person) : ViewModel() {
    val name = bind { person.observable(Person::name) }
}

对于ItemViewModel...

class PersonVarViewModel(var person: Person) : ItemViewModel<Person>() {
    val name = bind { person.observable(Person::name) }
}
于 2017-10-28T11:03:06.097 回答
0

您需要让 ItemViewModel 了解 person 实例,但还需要让它稍后对底层项目的更改做出反应。您需要将传入的人分配给itemItemViewModel 的属性。这可以通过在构造函数中传递它来完成:

class PersonVarViewModel(person: Person) : ItemViewModel<Person>(person) {
    val name = bind(Person::name)
}

请注意,如果添加此构造函数,则只能在手动将其推送到作用域时使用带有注入的视图模型,因为框架无法实例化它。因此,您也应该添加一个 noargs 构造函数,或者干脆省略 person 参数并在创建后分配给 item。

如果您更新底层人员中的值,则只有当该值是可观察的时,它才会在视图模型中可见。如果没有,您必须致电rollback()以更新此人的更改。您只能为特定字段调用回滚。

如果可能,请在域模型对象中使用可观察属性来避免此类问题。

于 2017-10-30T11:23:09.193 回答