我正在尝试将C#WPF应用程序转换为使用MVVM。我遇到的下拉餐点来自Xceed的WPF扩展工具包。我正在尝试将下拉餐点的封闭事件绑定到我的ViewModel中的一种方法。当按钮的上下文菜单关闭时,方法根本不会开火。
当我将EventName更改为单击时,该方法不会发出任何问题。我希望该方法在用户在下拉上下文菜单中选择了其中一个,而不是选择按钮本身时。我试图设置上下文菜单的数据附件(根据WPF ContextMenu Woes:我如何设置ContextMenu的DataContext?(,并使用单击菜单项本身的单击事件,但结果相同 - 没有错误,但是方法是方法。不开火。我还尝试使用不同的事件名称,例如下拉列表,下拉列表,关闭和插图,没有成功。
<xcad:DropDownButton Name="weekMonthDropButton" Background="White" Content="Chart By Week/Month" Width="150" Grid.Row="0" Grid.ColumnSpan="2">
<xcad:DropDownButton.DropDownContextMenu>
<ContextMenu>
<MenuItem Header="Week">
</MenuItem>
<MenuItem Header="Month"/>
</ContextMenu>
</xcad:DropDownButton.DropDownContextMenu>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Closed">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="WeekMonthMenuClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</xcad:DropDownButton>
我猜我要么在事件名称中犯了一个错误,要么在上下文的环境中犯了一个错误,但是我是WPF和MVVM的新手,并且很难调试问题。任何帮助将不胜感激
如果它可以帮助其他任何人 - 我最终沿着ICommand路线并为单个Menuitem设置DataContext。以下代码对我有用。
<xcad:DropDownButton Name="weekMonthDropButton" Background="White" Content="Chart By Week/Month" Width="150" Grid.Row="0" Grid.ColumnSpan="2">
<xcad:DropDownButton.DropDownContextMenu>
<ContextMenu >
<MenuItem Header="Week" Command="{Binding Path=PlacementTarget.DataContext.WeekMonthMenuCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
<MenuItem Header="Month"/>
</ContextMenu>
</xcad:DropDownButton.DropDownContextMenu>
</xcad:DropDownButton>