【问题标题】:Skipping data binding triggered events in WPF在 WPF 中跳过数据绑定触发的事件
【发布时间】:2017-04-23 11:22:19
【问题描述】:
我正在尝试在旧版 WPF 应用程序中记录所有用户交互(按钮单击、列表选择更改等)。我通过子类化所有 Windows 控件类(Button、TextBox、ComboBox 等)并覆盖某些函数(例如 Button 子类中的 OnClick())来记录这些事件发生的时间。
问题是应用程序中的几乎所有控件都使用数据绑定,当页面加载时,所有这些元素都会启动,并且会自动调用事件处理程序。我只想在用户更改这些控件时记录这些。
是否有一种优雅的方法可以在我记录时跳过由数据绑定触发的事件?
【问题讨论】:
标签:
c#
.net
wpf
logging
data-binding
【解决方案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 值)