使用Caliburn.Micro将命令绑定到ListView内的Button

我正在尝试创建类似MDI标签界面的东西,所以我左边有一个导航窗格(一个列表框),右边有一个ContentPresenter。

我有一个ShellViewModel,它上面有一个名为AvailAbleScreens的BindableCollection,我成功地使用ListViews DataTemplate绑定到该列表:

         

现在的问题是虽然Button的名称设置正确,但我不能让Command为我火。 在MdiViewModel类上,我有以下代码用于该按钮:

 public bool CanDisplayView() { return true; } public void DisplayView() { MessageBox.Show("Hello"); } 

所有的Caliburn.Micro示例都通过约定绑定到x:Name属性,但是如果我删除Text =“{Binding}”它会停止工作,所以我怀疑这种数据绑定方式对子模型不起作用?

无论如何,Shell的ViewModel目前非常简单:

 ShellViewModel * AvailableScreens -MdiViewModel1 -MdiViewModel2 * CurrentActiveScreen 

任何想法我如何用Caliburn.Micro做到这一点? Rob Eisenberg在Twitter上向我建议我可能想要在进入完全成熟的Caliburn框架之前先与Caliburn.Micro合作。

不幸的是,我们无法自动将约定应用于DataTemplates的内容。 原因是我们无法拦截WPF / Silverlight的模板创建机制。 要解决这个问题,您有几个选择:

  1. 不要在DataTemplates中使用约定; 请改用显式绑定和Message.Attach

  2. 将所有DataTemplates解压缩到UserControls中,这将重新引用UserControl上的约定。 这对于大型模板来说是一个好主意,但对于小型模板来说却很乏味

  3. 在DataTemplate的根UIElement上使用Bind.Model附加属性,如此Bind.Model="{Binding}" 。 执行此操作将导致约束与DataTemplate绑定。 不幸的是,由于Caliburn中的一些错误,这可能无法正常工作。 它确实在Caliburn.Micro中工作。 我希望尽快解决这个问题。