And*_*ers 3 data-binding wpf menubar caliburn.micro
我在我的WPF项目中使用Caliburn micro.静态菜单很容易与Caliburn绑定
<Menu Grid.Row="0" IsMainMenu="True">
<MenuItem Header="_File">
<MenuItem x:Name="OpenScript" Header="_Open script"/>
</MenuItem>
<MenuItem Header="_Script">
<MenuItem x:Name="RunScript" Header="_Run script" />
<MenuItem x:Name="StopScript" Header="_Stop script" />
</MenuItem>
<MenuItem Header="S_ettings">
<MenuItem x:Name="Plugins" Header="_Plugins">...Clickable children here</MenuItem>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
名称绑定到模型上的方法,但是对于上面看到的插件菜单,我们需要绑定PluginViewModel的集合.然后,当您单击插件时,我希望在菜单视图模型上触发Caliburn操作方法(你现在可以从那里获得IRutults的结果.这可能吗?
这个问题适用于这个开源项目 https://github.com/AndersMalmgren/FreePIE
编辑:忘了提到我已经解决了绑定部分,
public BindableCollection<PluginMenuViewModel> Plugins { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从模型中听取点击
最好的方法是添加自己的消息绑定器
MessageBinder.SpecialValues.Add("$originalsourcecontext", context => {
var args = context.EventArgs as RoutedEventArgs;
if(args == null) {
return null;
}
var fe = args.OriginalSource as FrameworkElement;
if(fe == null) {
return null;
}
return fe.DataContext;
});
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样从xaml中使用它
cal:Message.Attach="ShowSettings($originalsourcecontext)"
Run Code Online (Sandbox Code Playgroud)