如何在Kotlin多平台中正确使用双向绑定



我正在尝试使用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中导入的Stringjava.lang.String,而模型中的Stringkotlin.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}"

最新更新