Tig*_*ine 12 c# data-binding wpf mvvm caliburn.micro
我正在尝试创建类似于MDI选项卡式界面的东西,因此左侧有一个导航窗格(一个列表框),右侧有一个ContentPresenter.
我有一个ShellViewModel,它上面有一个名为AvailAbleScreens的BindableCollection,我成功地使用ListViews DataTemplate绑定到该列表:
<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>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,虽然Button的名称设置正确,但我不能让Command为我火.在MdiViewModel类上,我有以下代码用于该按钮:
public bool CanDisplayView()
{
return true;
}
public void DisplayView()
{
MessageBox.Show("Hello");
}
Run Code Online (Sandbox Code Playgroud)
所有的Caliburn.Micro示例都通过约定绑定到x:Name属性,但如果我删除Text ="{Binding}"它会停止工作,所以我怀疑这种数据绑定方式对子模型不起作用?
无论如何,Shell的ViewModel目前非常简单:
ShellViewModel
* AvailableScreens
-MdiViewModel1
-MdiViewModel2
* CurrentActiveScreen
Run Code Online (Sandbox Code Playgroud)
任何想法我如何用Caliburn.Micro做到这一点?Rob Eisenberg在Twitter上向我建议我可能想要在进入完全成熟的Caliburn框架之前开始使用Caliburn.Micro.
Eis*_*ect 20
遗憾的是,我们无法自动将约定应用于DataTemplates的内容.原因是我们无法拦截WPF/Silverlight的模板创建机制.要解决这个问题,您有几个选择:
不要在DataTemplates中使用约定; 请改用显式绑定和Message.Attach
将所有DataTemplates解压缩到UserControls中,这将重新引用UserControl上的约定.这对于大型模板来说是一个好主意,但对于小型模板来说却很乏味
像这样在DataTemplate Bind.Model
的根上使用附加属性.执行此操作将导致约束与DataTemplate绑定.不幸的是,由于Caliburn中的一些错误,这可能无法正常工作.它确实在Caliburn.Micro中工作.我希望尽快解决这个问题.UIElement
Bind.Model="{Binding}"