2009-10-15 109 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的用途。