我有一个复杂的应用程序,我正在尝试使用 MVVM(我不熟悉的模式)开发 - 该应用程序有选项卡和停靠窗口,每个都有“选定对象”的概念,顶部有一个全局工具栏具有需要对“选定对象”进行操作的操作的应用程序。
想象一下类似于 Visual Studio 的稍微简单一点的版本,例如:
- 如果选择了包含列表视图的窗格,其中所选对象为“非活动”,则应启用“激活”工具栏项。(全局选中项就是那个列表视图项)
- 但是,如果用户随后单击另一个窗格中没有选定对象的选项卡,则应禁用相同的工具栏项(全局选定项为空)。
暂时忽略诸如多项选择之类的复杂情况,目前我通过创建一个代表“应用程序”本身的包罗万象的单例*模型类来实现这一点,例如
class MyAppModel : INotifyPropertyChanged
{
public ISelectableObject SelectedObject { get; }
}
然后,我有一个“系统”(我承认我在这里忽略了很多细节),以确保当 UI 中的更改导致全局更改时更新此属性(并触发相关事件)当前选定的对象”,工具栏按钮使用此属性来确定可用性等...
但是,我对这似乎不太像 MVVM 感到困惑(我在某处读到 UI 状态应该存储在 ViewModel 中?)
- 拥有一个以这种方式代表“应用程序”的全局模型是个好主意吗?(那里还有其他属性可以以类似的方式跟踪应用程序中的其他内容,例如打开的文档)
- 如果不是,我应该使用什么来允许全局组件(例如工具栏中的项目)找出并跟踪“全局选定对象”是什么
(*) 这可以很容易地使用依赖注入来提供