我有以下导航栏,带有 Content
数据模板标记如下:
<dxn:NavBarControl Name="SideMenuNavBar" DataContext="{Binding}" IsEnabled="{Binding Enabled}" ItemsSource="{Binding Bars}" HorizontalAlignment="Left" VerticalAlignment="Stretch" Margin="1">
<dxn:NavBarControl.Resources>
<Style TargetType="dxn:NavBarGroup">
<Setter Property="Header" Value="{Binding DisplayText}"/>
<Setter Property="Content" Value="{Binding MenuItems}"/>
<Setter Property="DisplaySource" Value="Content"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TreeView ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=ChildItems}" DataType="{x:Type common:MenuItemBase}">
<TextBlock Text="{Binding ItemText}" HorizontalAlignment="Stretch">
<TextBlock.ContextMenu>
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
<MenuItem Header="{Binding MenuText}" Click="MenuItem_OnClick" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</dxn:NavBarControl.Resources>
<dxn:NavBarControl.View>
<dxn:NavigationPaneView GroupDisplayMode="Text" ItemDisplayMode="Text" MaxVisibleGroupCount="12"/>
</dxn:NavBarControl.View>
</dxn:NavBarControl>
绑定(bind)正在工作,因为我的一个菜单项 TreeView 正确显示,但是当我单击(
MouseDown
事件)时,什么也没发生,或者当我双击以下处理程序时,处理程序不执行:private void Control_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var x = sender;
}
我在
var x = sender;
上的断点永远不会被击中。注意:我知道我不应该使用事件,而应该使用命令,或者其他一些耦合较少的代码,但我迫切需要演示当用户单击菜单项时会发生什么,并且在事件之前,我的命令代码没有也不开火。这里有什么问题?
最佳答案
首先:ContextMenu
完全不在您的控制范围内 VisualTree
因此,除非您按照 here 所述更改绑定(bind),否则正常的绑定(bind)根本不起作用
由于您使用的是事件背后的代码,请尝试以下操作:
<MenuItem Header="{Binding MenuText}" MouseDown="MenuItem_MouseDown" />
和
private void MenuItem_MouseDown(object sender, MouseButtonEventArgs e)
{
var x = sender;
}
关于c# - 为什么 WPF/MVVM 应用程序中没有触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787552/