【发布时间】:2014-07-18 13:02:57
【问题描述】:
首先,我仍然习惯于 Caliburn 和 WPF,所以我可能以错误的方式执行此操作。我很想知道更好的方法!
我有一个Conductor shell 视图模型,它有一个包含一些共享元素的视图,以及一个ActiveItem 的内容控件。现在,我希望将来自ActiveItem 视图模型的一组按钮显示在内容控件之外,但仍然让它们的点击事件转到活动视图模型。我试过像这样添加ItemsControl:
<ItemsControl x:Name="ActiveItem_Buttons">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}" Margin="10" Height="25" Width="80">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="{Binding Name}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
(我正在做 Interaction.Trigger 部分,因为我无法绑定到 x:Name,这会导致 Caliburn 自动连接它)
但是,我收到一个异常,指出 Caliburn 找不到匹配的方法。似乎它开始从 shell 视图模型而不是活动项目视图模型中冒泡事件。如何设置事件冒泡的“起点”?我找到并尝试了附加属性cal:View.Model="{Binding ActiveItem}",但这似乎没有帮助。
编辑:为了清楚起见:Buttons 属性定义在视图模型基类 ButtonScreenBase 上,shell 继承 Conductor<ButtonScreenBase>
【问题讨论】:
标签: c# wpf caliburn.micro