将命令绑定到ListView中的按钮与Caliburn.Micro
我想创建一个像MDI选项卡式界面,所以我有一个左侧的导航窗格(Listbox)和右侧的ContentPresenter。将命令绑定到ListView中的按钮与Caliburn.Micro
我有了一个BindableCollection它称为AvailAbleScreens,我成功地设法绑定到该列表与列表视图的DataTemplate一个ShellViewModel:
<ListView x:Name="AvailableScreens">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<BulletDecorator />
<Button x:Name="DisplayView">
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</Button>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
现在的问题是,虽然按钮的名称设置正确地说,我不能让命令为我着火。 在MdiViewModel类我该按钮的下面的代码:
public bool CanDisplayView()
{
return true;
}
public void DisplayView()
{
MessageBox.Show("Hello");
}
所有Caliburn.Micro样品通过约定于x结合工作:名称属性,但如果我删除文本=“{结合} “它停止工作,所以我怀疑这种数据绑定方式不适用于子模型?
无论如何,壳牌的视图模型是非常简单的时刻:
ShellViewModel
* AvailableScreens
-MdiViewModel1
-MdiViewModel2
* CurrentActiveScreen
任何想法我如何与Caliburn.Micro做到这一点? Rob Eisenberg在推特上向我建议,在进入完整的Caliburn框架之前,我可能想先与Caliburn.Micro开始。
不幸的是,我们不能自动将惯例应用于DataTemplates的内容。原因是我们无法拦截WPF/Silverlight的模板创建机制。为了解决这个问题,你有几个选择:
不要在DataTemplates中使用约定;使用显式绑定和Message.Attach代替
将所有DataTemplates提取到UserControls中,这将重新遍历UserControl中的约定。这是一个大的模板,小的
使用
Bind.Model
附加属性的DataTemplate中的根UIElement
这样Bind.Model="{Binding}"
一个好主意,但乏味。这样做会导致约定与DataTemplate绑定。不幸的是,由于Caliburn中存在一些错误,这可能不太合适。它确实在Caliburn.Micro中工作。我希望尽快解决这个问题。