2009-10-15 64 views
2

我希望这是有道理的。响应数据绑定用户控件中的WPF Click事件

我创建了几个WPF用户控件。最低级别的项目是'PostItNote.xaml'。接下来,我有一个'NotesGroup.xaml'文件,它有一个ItemsControl绑定到PostItNotes列表。在此之上,我有一个'ProgrammerControl.xaml'文件。每个ProgrammerControl上有四种不同的NotesGroup用户控制网格(每NotesGroup包含0许多PostItNotes。

然后,我有我的主窗口。它也有一个ItemsControl,势必程序员的列表。

因此,你最终得到一个程序员列表的高级视觉视图,每个程序员有四组票,每组票都有很多PostItNotes。

我遇到的麻烦是我想要在我的mainWindow代码后面的文件中响应鼠标点击事件

我可以添加一个MouseC舔事件到我的PostItNote.xaml.vb文件中,当用户点击PostItNote时会被调用,我可以重新提升事件;但我似乎无法让NotesGroup监听该事件。我不确定这是否是正确的方法。

当用户点击PostItNote时,我会做一堆商业逻辑类型的东西,PostItNote控件没有引用/不知道它。

任何人都可以指向正确的方向吗?

回答

1

你有几个选择:

  1. 使用它们中的WPF event routing“掏空”阶段打响了PreviewXXX事件。父控件可以随时预览通过它们传递给孩子的事件。
  2. 使用更高级的方法来利用AddHandler方法来连接事件,您可以传递一个名为“handledEventsToo”的参数,这个参数基本上意味着您想知道事件何时发生在“内部”,即使某些后代元素处理了该事件本身。
1

我打算在这里寄一份传单。你可能是不想处理高的事件;不是真的。你正在较低的层面上捕捉事件,这是不可避免的。考虑从PostItNote单击事件处理程序调用路由命令。

路由命令向上冒泡并向下穿过树。你可以有一个架构,一个高层处理程序可以监听一个逻辑事件(也许是打开一个postit note?)。这个处理程序不需要关心命令来自哪里。它可能是你点击某个东西,它可能是从点击一个工具栏按钮。两者都是有效的方案。

这听起来像你正在创建某种自定义用户界面,我说得对吗?您希望应用程序响应用户交互。这就是RoutedCommands的用途。