Предоставляя действие, которое наблюдает за viewModel, может ли это действие присвоить значение directlty для viewModel aliveata - PullRequest
0 голосов
/ 24 марта 2020

Полезно ли вызывать это из упражнения:

viewModel.somedata = "some value"

Знание того, что задание уже наблюдает за моделью представления, а некоторые данные являются живыми данными

1 Ответ

0 голосов
/ 24 марта 2020

Чтобы придерживаться рекомендаций MVVM, лучше для ViewModel позаботиться об этом. Представление будет обновлено после обновления модели.

Пример в Kotlin:

С этим примером модели и функцией расширения для обновления значения:

data class MyModel(
        val somedata: String,
        val otherdata: String
)


fun MyModel.toStateWithNewSomedata(newSomedata: String): MyModel =
        this.copy(
                somedata = newSomedata
        )

И это определение LiveData в ViewModel:

var myLiveData = MutableLiveData<MyModel>()

Затем у вас есть этот метод, определенный в ViewModel, который можно вызвать из представления для обновления значения:

fun updateSomedata(newVal: String) {
    myLiveData.value?.let { model ->
        val updatedModel = model.toStateWithNewSomedata(newVal)
        myLiveData.postValue(updatedModel)
    }
}

Тогда вы все равно можете наблюдать как обычно в представлении:

    viewModel.myLiveData.observe(this, Observer { updatedModel ->
        //update view with updated model
        val newSomedata = updatedModel.somedata

    })

Если вы вызываете метод updateSomedata(), он обновит модель, которая обновит представление.

...