【发布时间】:2015-05-21 09:13:52
【问题描述】:
我有一个带有 GridView 的 ListView 作为视图,它按照约定绑定到我的 ViewModel 的 Instances 属性:
<ListView Name="Instances">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Property}"
Header="Property"/>
</GridView>
</ListView.View>
</ListView>
现在我需要在单击 GridViewColumnHeader 时触发 ViewModel 上的一些方法。
我尝试过这样增强 GridViewColumn
<ListView Name="Instances"
cal:Message.Attach="[Event GridViewColumnHeader.Click] = [Action Foo()]">
<!-- the rest stays unchanged -->
</ListView>
我什至试着像这样玩弄 ColumnHeaderContainerStyle
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="GridViewColumnHeader">
<EventSetter Event="Click">
<cal:ActionMessage MethodName="Foo"/>
<!-- does not compile -->
</EventSetter>
</Style>
</GridView.ColumnHeaderContainerStyle>
</GridView>
这显然不起作用。
如何使用 Caliburn Micro 将 ViewModel 中的方法(而不是具有绑定的命令)连接到附加事件(以更一般的方式询问)?
【问题讨论】:
-
如果可以的话,你真的必须通过
VM来做吗?我正在使用GridView为我的ListView创建排序,并且只使用代码隐藏进行排序。它节省了很多时间和麻烦。这仅适用于您需要进行排序的情况。您的示例看起来像是在排序完成后显示了一些信息。这只是一个建议 HTH -
@XAMlMAX 绝对,...因为我需要应用 propertyInfo(从绑定中获取)对数据库进行新查询(具有正确的排序),因为我们只显示完整的摘录数据集。否则排序将是错误的......
-
好的,那么在这种情况下你怎么能不使用简单的
DrillDownCommand来使用呢?您可以使用绑定并将数据传递给您的命令方法,并执行您需要执行的操作。除非我在这里遗漏了一些关键约束? BTWDrillDownCommand基本上会调用你的Foo()方法。 -
@XAMlMAX 您能否提供一个示例作为答案?我想尽可能减少混乱,以尽可能严格地坚持 Caliburn Micro 实践。
-
@XAMlMAX 时间目前不在我这边 - 我稍后会检查 :)
标签: wpf events caliburn.micro attached-properties