我们在一个新的 Silverlight 项目中使用了 Caliburn.Micro,一切都很好。内置约定将按钮单击事件绑定(bind)到 viewModel,但我不确定在数据网格和组合框上处理 selectionChanged 事件的最佳方法是什么。
目前,我正在绑定(bind)到所选项目并调用自定义逻辑,但我觉得这有点代码味道,我应该将属性的设置和 selectedChange 事件分开。但是,如果我将这些分开,如何通过命令将选择更改事件绑定(bind)到我的 View 模型?还是事件触发器?或者下面的代码可以接受吗?这是一个很小的变化,但我到处都在做这个逻辑。
private Foo _selectedFoo;
public Foo SelectedFoo
{
get
{
return _Foo;
}
set
{
if (_Foo != null && _Foo.Equals(value)) return;
_Foo = value;
NotifyOfPropertyChange("SelectedFoo");
NotifyOfPropertyChange("CanRemove");
LoadRelatedBars();
}
}
最佳答案
我经常使用这种技术,我觉得很舒服。
我发现虚拟机对自己的状态变化使用react非常好,不需要外部参与者(顺便说一下是 View ,但也可能是另一个组件)来设置新状态,然后向虚拟机发出状态是改变了。
但是,如果您真的想要,您可以使用 Message.Attach 附加属性将 View 中的事件 Hook 到 VM 中的操作:
cal:Message.Attach="[Event SelectionChanged] = [OnSelectionChangedAction]"
(另见 https://caliburnmicro.com/documentation/actions)
关于silverlight - 使用 Caliburn.Micro 将 SelectionChanged 绑定(bind)到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041233/