【问题标题】:Binding Properties and Methods to a single element using Caliburn.Micro使用 Caliburn.Micro 将属性和方法绑定到单个元素
【发布时间】:2011-09-07 11:14:33
【问题描述】:

所以,我是 Silverlight 开发的新手,我正在尝试找出并使用 Caliburn.Micro 框架。我知道 CM 使用约定来匹配视图模型中的属性与视图中的元素,并且默认约定可以在 CM 的 ConventionManager 类中找到。

我的情况是这样的:我有一个名为“库”的 TreeView(使用 Silverlight 工具包),并且我已成功地将我的视图模型中的 ObservableCollection 类型的属性绑定到 TreeView。该属性也被命名为“库”,因此 CM 完成了剩下的工作。

现在,我想在视图模型中创建一个属性,该属性将使用 TreeView 的 SelectedItem 进行设置。我应该如何使用 CM 的约定来做到这一点?我应该如何命名该属性?

最后,我希望在触发 TreeView 的 SelectedItemChanged 事件时调用视图模型中的方法。我应该如何命名该方法以便通过约定来完成?

有人可以帮忙吗?

艾森伯格……艾森伯格……(以我最好的本斯坦模仿)

谢谢, 大卫

编辑:我还应该注意,我已经修改了 CM 程序集,将以下行添加到 ConventionsManager 的构造函数中,因为它之前被排除在 Silverlight 版本的 CM dll 之外:

AddElementConvention(TreeView.ItemsSourceProperty, "SelectedItem", "SelectedItemChanged");

【问题讨论】:

    标签: silverlight-4.0 mvvm caliburn.micro


    【解决方案1】:

    您应该能够创建一个名为 SelectedLibrary 或 ActiveLibrary 的公共属性,而 CM 将完成剩下的工作。如果这不起作用,您可以随时使用 Action:

    cal:Message.Attach="[Event SelectedItemChanged] = [Action SelectedLibrary($eventArgs)]"
    

    编辑:你需要一个属性设置器和一个触发方法吗?

    【讨论】:

    • 德里克,谢谢你的帮助。我尝试将属性命名为“ActiveLibrary”和“SelectedLibrary”,但均无济于事。我能够使用 Message.Attach 在视图模型中触发该方法,但是我试图更好地理解约定。我也明白设置属性和触发方法都是多余的,但同样,这对我来说是一个学习练习。
    • 该约定可能不适用于 TreeView 控件。如果您尝试使用 ListBox 应该可以。我想触发一个方法可以让你有更多的选择来传递你可以传递的东西。
    • 模型无法绑定到 TreeView 的 SelectedItem 属性,因此没有可用的约定。如果您使用 Selector 类型控件,它允许数据绑定并且 CM 支持此处提到的约定。在此之前使用 Derek 分享的内容。
    猜你喜欢
    • 2011-05-26
    • 2015-08-23
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2015-08-30
    • 2013-11-05
    • 2018-06-04
    • 2013-05-04
    相关资源
    最近更新 更多