2017-04-23 33 views
0

我正在嘗試記錄傳統WPF應用程序中的所有用戶交互(按鈕單擊,列表選擇更改等)。我通過繼承所有窗口控件類(Button,TextBox,ComboBox等)並覆蓋某些函數(例如Button子類中的OnClick())來記錄這些事件發生的時間。在WPF中跳過數據綁定觸發的事件

問題幾乎是應用程序中的所有控件都使用數據綁定,並且當頁面加載時,它會爲所有這些元素啓動並自動調用事件處理程序。我只想在用戶更改這些控件時記錄這些內容。

當我登錄時,是否有一種優雅的方式可以跳過由數據綁定觸發的事件?

+0

像你在說哪些事件? – AnjumSKhan

回答

1

在事件處理程序中,構造一個System.Diagnostics.StackTrace,其中包含從事件處理程序一直到應用程序的Main方法的所有堆棧幀。

System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(); 
System.Diagnostics.Debug.WriteLine(trace.ToString()); 

採取SelectionChanged事件爲一個例子,如果該事件由數據結合而觸發,應該有一些幀看起來像

在System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject的d, DependencyPropertyChangedEventArgs E)
...

在System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable的值)