如何在 Kotlin-Multiplatform 中正确使用双向绑定?

How to properly use two way binding in Kotlin-Multiplatform?

我正在尝试使用 String 变量将其绑定到我的视图中。 当我使用带有 String 属性 的模型对象时,它运行良好。但是如果我单独使用 String 变量,它只适用于一种绑定方式。

视图模型:

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.Stringxml 中你有 java.lang.String。您可以简单地使用在 viewModel 中创建的变量,例如:- android:text="@={viewModel.yourVariable}"