所有方法都必须公开,以便Caliburn.Micro匹配它们

时间:2012-04-27 12:03:00

标签: caliburn.micro

我刚刚开始使用Caliburn.Micro,我在所有的例子中都注意到这些方法都是公开的。我决定通过添加一个按钮来测试:

x:Name="CloseMainWindow"

在我的VM中,我添加了一个方法:

private void CloseMainWindow()
{
  TryClose();
}

当我单击按钮时,没有任何反应,我没有点击断点,但如果我将方法更改为公共,它就可以工作。 我不认为这是最好的方法。

为所有方法创建ICommand属性是否可以接受?

编辑:我刚刚阅读了上面问题的答案,Caliburn.Micro中没有也永远不会有ICommands。所以我原来的问题仍然需要一个答案,为什么一切都必须在VM中公开并且这样安全吗?

1 个答案:

答案 0 :(得分:0)

我不知道你的意思是“这样安全吗?”。比什么更安全?

无论如何,Caliburn.Micro 可以设计为允许其约定绑定到私有方法,但这有一些缺点。首先,它不适用于部分信任环境,如Silverlight或XBAP或沙盒插件。您需要完全信任才能使用Reflection来访问私有成员,而Caliburn.Micro旨在能够以部分信任的方式运行(毕竟它确实支持Silverlight)。

但更大的原因是它会违反封装。这些是您打算从类外部调用的方法。 (毕竟,视图是一个单独的类;如果你在代码隐藏中自己连接它,你必须公开viewmodel方法。)有一个词“我打算从我自己的课外调用它“在语言规范中,那是public。如果你设置了一些从类外部调用私有方法的魔法,你就会违反封装和最小惊讶原则,因为那不是private的含义。

如果您真的希望能够绑定到私有方法,则可以自定义约定。但它会让你的代码更难理解,所以除非你能提出一个非常好的理由,否则我不会推荐它。