在WPF中跳过数据绑定触发事件

时间:2017-04-23 11:22:20

标签: c# .net wpf logging data-binding

我尝试在旧版WPF应用程序中记录所有用户交互(按钮点击,列表选择更改等)。我通过继承所有Windows控件类(Button,TextBox,ComboBox等)并覆盖某些函数(例如Button子类中的OnClick())来记录这些事件发生的时间。

问题是应用程序中的几乎所有控件都使用数据绑定,当加载页面时,它会启动所有这些元素并自动调用事件处理程序。我只想在用户更改这些控件时记录这些。

当我记录时,是否有一种优雅的方法可以跳过数据绑定触发的事件?

1 个答案:

答案 0 :(得分:1)

在事件处理程序中,构造一个System.Diagnostics.StackTrace,其中包含从事件处理程序一直到应用程序的Main方法的所有堆栈帧。

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

SelectionChanged事件为例,如果事件是由数据绑定触发的,那么应该有一些框架看起来像

  

at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
  ...

     

at System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value)