#!/usr/bin/python # -*- coding: utf-8 -*- """ Model 层。 Model 负责保存业务数据。这个 demo 只有一个字符串模型 StringModel, 它保存一条日志文本;当日志文本被修改时,会向事件通道发布通知。 """ from mvvm.framework import fw_proxy, BaseModel class StringModel(BaseModel): """字符串数据模型:保存一个字符串,并在值改变时发布事件。""" def __init__(self, topic: str, value: str): # topic 用于告诉框架:这个 Model 的变化应该发布到哪个主题。 super().__init__(topic) # 真正保存字符串值的私有变量。 self._string = value @property def value(self): """读取当前字符串值。""" return self._string @value.setter def value(self, value: str): """ 修改字符串值。 这是 MVVM 自动刷新的关键位置:只要业务代码给 model.value 赋值, Model 就会发布事件,View 会在订阅到事件后自动刷新。 """ self._string = value fw_proxy.channel.publish(self._topic, value) def signal_proxy(self, value: str): """ 接收 View 反向传来的值。 在双向绑定场景中,如果 View 发布了自己的变化,框架会调用这里, 从而把 View 的新值同步回 Model。 """ super().signal_proxy() self._string = value