Как я поддерживаю когерентность между моделью и моделью представления в шаблоне MVVM?

Запуск функции с timer каждую миллисекунду не рекомендуется, ссылка: https://stackoverflow.com/a/30983444/8447312

Так что вы можете запускать функцию таймера каждый 50 миллисекунд, чтобы быть в безопасности и обновить свой индикатор выполнения. Это не должно быть слишком заметным.

Также убедитесь, что timeRemaining является Double, а затем просто попробуйте:

func startTimer() {

    timer = Timer.scheduledTimer(timeInterval: 0.050, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: true)

}

@objc func timerUpdate() {

    if timeRemaining <= 0 {
        progressBar.setProgress(Float(0), animated: false)
        bonusTimerLabel.text = "0"
        bonusTimerLabel.textColor = UIColor(red: 186/255, green: 16/255, blue: 16/255, alpha: 1)

    } else {
        progressBar.setProgress(Float(timeRemaining)/Float(20), animated: false)
        timeRemaining -= 0.050
        bonusTimerLabel.text = "\(Int(timeRemaining))"
    }

8
задан 3 February 2009 в 13:24
поделиться

3 ответа

Я не крупный эксперт, но я думаю, что это имеет место да. Общее представление состоит в том, чтобы действительно распространить изменение между представлением и viewModel через Привязку, и затем между ViewModel и Моделью через события (в Модели-> направление ViewModel) или зависимость (в другом направлении).

Я не знаю, насколько стандартный то есть, но мое понимание MVVM то, что ViewModel должен содержать ссылку на модель так, чтобы, когда пользователь изменяет представление, ViewModel назвал соответствующий код модели. Наоборот, Модель должна сгенерировать события при изменении, и ViewModel должен обновить себя соответственно (ViewModel, являющийся наблюдателем к модели).

6
ответ дан 5 December 2019 в 17:42
поделиться

@Does это действительно означает, что я должен сохранить два совершенно других типа набора, представляющие те же данные в когерентности?

Думаю, что да. Это довольно скучно, но это работает вполне хорошо. Хотелось бы надеяться, в будущем у нас будет также генератор кода для создания части ViewModel.

Karl работает над этим: http://karlshifflett.wordpress.com/mvvm/

2
ответ дан 5 December 2019 в 17:42
поделиться

Вам нужен ясно ObservableCollections в viewmodel так, да, Вам будут нужны два совершенно других типа набора в модели и в viewmodel.

Я сделал статью о выполнении отмены / восстановление в MVVM, где можно найти возможное решение этого. Это использует то, что я называю MirrorCollection: ведьма производного класса ObservableCollection автоматически получает его объекты из Списка (список модели).

Я думаю, что это - интересное решение, можно найти статьи здесь

Часть 1: Используя шаблон Viewmodel для обеспечения Отмены / Восстановление в WPF

Часть 2: списки Viewmodelling (вот определение MirrorCollection),

2
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: