c# - 为什么 WPF/MVVM 应用程序中没有触发事件?

标签 c# wpf mvvm devexpress prism-4

我有以下导航栏,带有 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/

相关文章:

c# - 从 DbContext 获取所有被跟踪的实体?

.net - 在 Windows 10 IOT 上运行的 .net Core 3 可以与 WPF 一起使用吗?

c# - 如何计算已知字体大小和字符的 WPF TextBlock 宽度?

c# - WPF 双向绑定(bind)不起作用

c# - 在没有 MVVM 的情况下更新 LongListSelector ItemSource

c# - 如何使用 Wpf、MVVM 获取图像像素位置和 RGB 值?

c# - 多层列表上的C#LINQ Distinct()

C#:定义类变量、默认值和获取设置不起作用?

C# WPF-如果右键单击系统任务栏上的应用程序图标,则在关闭应用程序之前询问用户

c# - 将 ObservableCollection 过滤到多个列表框