根据文档,kotlin var属性可以在ViewModel中绑定为
// Kotlin var property
class PersonVarViewModel(person: Person) : ViewModel() {
val name = bind { person.observable(Person::name) }
}
似乎没有用。 如何解决这个问题。 IDE显示红色下划线" bind" 但如果我写
val name = bind(RoomType::name)
它没有显示错误。但是使用UI字段更新值不会更新模型值。 请帮忙
答案 0 :(得分:1)
在您的班级声明中,使用var person: Person
。
person
需要是类的成员,而不仅仅是构造函数的参数。您可以通过在构造函数参数中声明它var
或val
来执行此操作,或者您可以按常规方式将成员字段添加到类中并分配它(可能使用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) }
}
答案 1 :(得分:0)
您需要让ItemViewModel知道person实例,同时让它对稍后对基础项的更改做出反应。您需要将传入的人员分配到ItemViewModel的SELECT *
属性。这可以通过在构造函数中传递来完成:
item
请注意,如果添加此构造函数,则只能将该viewmodel与注入一起使用,如果将其手动推入范围,因为它无法由框架实例化。因此,您应该添加一个noargs构造函数,或者只是省略person参数并在创建后指定给item。
如果更新基础人员中的值,则只有在值可观察时才会在视图模型中显示该值。如果没有,则必须致电class PersonVarViewModel(person: Person) : ItemViewModel<Person>(person) {
val name = bind(Person::name)
}
更新此人的更改。您只能为特定字段调用回滚。
如果可能,请在域模型对象中使用可观察属性以避免此类问题。