代码之家  ›  专栏  ›  技术社区  ›  Rob P.

响应数据绑定用户控件中的WPF单击事件

  •  2
  • Rob P.  · 技术社区  · 16 年前

    我希望这是有道理的。

    我创建了几个WPF用户控件。最低级别的项是“PostitNote.xaml”。接下来,我有一个“notesgroup.xaml”文件,它有一个itemscontrol绑定到postinotes列表。除此之外,我还有一个“programmercontrol.xaml”文件。每个ProgrammerControl都有一个网格,上面有四个不同的notesGroup用户控件(每个notesGroup包含0多个postitNotes)。

    然后,我有了我的主窗口。它还有一个itemscontrol,绑定到一个程序员列表中。

    所以,你最终会看到一个程序员列表的高级可视化视图,每个程序员有四组记录单,每组记录单有许多postitnote。

    我遇到的问题是,我想响应主窗口代码隐藏文件中的鼠标单击事件。

    我可以在postitnote.xaml.vb文件中添加mouseclick事件,当用户单击postitnote时调用该事件,我可以重新引发该事件;但我似乎无法让notesgroup侦听该事件。我不确定这是否是正确的方法。

    当用户单击PostitNote时,我将做一些业务逻辑类型的事情,PostitNote控件没有引用或不知道它。

    有人能给我指出正确的方向吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Drew Marsh    16 年前

    您有几个选择:

    1. 使用在“隧道”阶段激发的PreviewXXX事件 WPF event routing . 父控件始终可以预览向下传递给子控件的事件。
    2. 使用更高级的方法来连接事件,利用addhandler方法,您可以向其传递一个名为“handledEventsTo”的参数,这基本上意味着您希望知道事件在“内部”发生的时间,即使某些子元素本身处理了事件。
        2
  •  1
  •   Pieter Breed    16 年前

    我要在这里买一张传单。你 可能 不想处理这么高的事件;无论如何也不想。你在较低的层次上抓住了这个事件,这是不可避免的。考虑从PostitNote单击事件处理程序调用路由命令。

    路由命令冒泡向上,并通过树向下隧道。您可以有一个体系结构,在该体系结构中,高级处理程序可以监听逻辑事件(是否打开Postit注释?)。此操作的处理程序不需要关心命令的来源。可能是因为你点击了某个东西,也可能是因为你点击了一个工具栏按钮。两者都是有效的方案。

    听起来你在创建某种自定义用户界面,对吗?您希望应用程序响应用户交互。这就是 RoutedCommands 是为了。