我正在尝试使用String
变量将其绑定到我的视图中。当我使用具有String
属性的模型对象时,它工作得很好。但是,如果我单独使用String
变量,它只适用于单向绑定。
ViewModel:
class SampleModel(var data : String = "")
var myModel : SampleModel = SampleModel()
var myVariable : String = ""
XML:
<data>
<variable
name="model"
type="MyViewModel.SampleModel" />
<variable
name="variable"
type="String" />
</data>
<!-- Two way works fine -->
<EditText
android:text="@={model.data}"/>
<!-- Only one way works -->
<EditText
android:text="@={variable}"/>
SampleModel
中的字符串可以很好地使用双向绑定,但String
变量则不能。
我认为这是因为xml中导入的String
是java.lang.String
,而模型中的String
是kotlin.String
。我无法在xml中使用kotlin.String
。
有什么解决方案可以解决这个问题吗?或者在Kotlin-Multiplatform
项目中有没有合适的双向绑定方式?
看起来您在xml文件中添加了一个错误的变量。在视图模型中,您创建了一个名为myVariable
、类型为String
的变量,但在xml
文件中,您正在此处创建另一个变量:-
<variable
name="variable"
type="String" />
所以这两个变量是不同的。您不需要在xml
文件中导入任何内容,只需创建一个viewModel
变量,您已经在这里完成了:-
<variable
name="model"
type="MyViewModel.SampleModel" />
现在只需像这样使用:-android:text="@={model. myVariable}"
UPDATE:-在这里,您需要使用我在viewModel
中创建的String
变量,因为它使用了kotlin.String
,而在xml
中您有java.lang.String
。您可以简单地使用在viewModel
中创建的变量,例如:-android:text="@={viewModel.yourVariable}"