【问题标题】:Interaction between View and ViewModel in CaliburnCaliburn 中 View 和 ViewModel 之间的交互
【发布时间】:2023-03-06 07:34:01
【问题描述】:
我是 Caliburn 的新人。
我有几个关于 MVVM 和 Caliburn 的问题。
视图如何在 ViewModel 上显式调用方法? Caliburn 首先调用 ViewModel 构造函数。那么如果是,那么实例将被包含在哪里?我的 View 中的代码此刻创建了一个新实例(我需要显式调用 ViewModel 上的方法)。但是关于 ViewModel 应该已经实例化,这是愚蠢的。
如何在 UI 线程上强制进行绑定更新?
【问题讨论】:
标签:
wpf
mvvm
caliburn.micro
caliburn
【解决方案1】:
Caliburn.Micro 具有actions 的概念,可以从视图调用视图模型上的动词。您可以在很大程度上为此使用约定,例如,如果您的视图中有Button 和x:Name="Save",那么当单击Button 时,将调用视图模型上的Save 方法。
您始终可以使用显式绑定来覆盖约定,也可以提供自己的约定,Caliburn.Micro 还提供附加属性以将视图模型方法与视图中的事件相关联。
在强制更新 UI 方面,您的视图模型将实现 INotifyPropertyChanged,Caliburn.Micro 提供了它的基本实现,包括 PropertyChangedBase 和 Screen(增加了生命周期)。
然后您可以使用 Caliburn.Micro 提供的辅助方法来调用 PropertyChanged 事件。这称为NotifyOfPropertyChange,它可以使用表达式 lambda 来指定要通知的属性,而不是使用魔术字符串。