Visual Studio调试WPF时,ListView绑定的C#属性Getter被反复调用如何解决?
问题:调试WPF时,调试器循环遍历ListView绑定的对象属性,如何阻止?
我正在调试WPF程序,但每次启动调试时,即便使用了步过(Step Over)操作,调试器仍会循环遍历XAML中ListView绑定的对象属性。请问是否有办法阻止这种情况?
调试器截图:



关联的XAML代码:
<ListView Name="lstMovies" Grid.Row="1" Grid.Column="1" FlowDirection="LeftToRight" ItemsSource="{Binding Movies}" SelectedItem="{Binding CurrentMovie, Mode=TwoWay}" SelectionChanged="lstMovies_SelectionChanged" SelectionMode="Single"> <ListView.View> <GridView> <GridView.Columns> <!-- COLUMN WIDTHS FITTED WITH AUTO AND MEASURED WITH PowerToys --> <GridViewColumn Width="235" DisplayMemberBinding="{Binding Path=Title}" Header="Title" /> <GridViewColumn Width="65" DisplayMemberBinding="{Binding Path=Genre}" Header="Genre" /> <GridViewColumn Width="76" DisplayMemberBinding="{Binding Path=RunningTime}" Header="Running Time" /> <GridViewColumn Width="109" DisplayMemberBinding="{Binding Path=Instructor}" Header="Instructor" /> <GridViewColumn Width="93" DisplayMemberBinding="{Binding Path=PremiereDate}" Header=" Premiere Date " /> </GridView.Columns> </GridView> </ListView.View> </ListView>
解决方案
启用“仅我的代码”模式
打开Visual Studio的「工具」→「选项」→「调试」→「常规」,勾选启用“仅我的代码”。这个设置会让调试器跳过WPF绑定相关的系统框架代码,只聚焦在你自己编写的业务逻辑上,直接避免进入属性遍历的循环。给绑定属性添加调试跳过特性
如果你的ViewModel里的属性有自定义的get/set逻辑,不想让调试器进入这些属性的访问过程,可以给属性加上[DebuggerStepThrough]特性(需要引用System.Diagnostics命名空间),示例代码:using System.Diagnostics; private string _title; public string Title { [DebuggerStepThrough] get => _title; [DebuggerStepThrough] set => _title = value; }加上这个特性后,调试器会直接跳过该属性的get/set调用,不会进入步进流程。
过滤符号加载
进入「调试」→「选项」→「调试」→「符号」,取消勾选不需要的系统符号库,只保留你自己项目的符号。这样调试器不会加载WPF绑定相关的系统符号,也就不会进入对应的代码逻辑。关闭绑定跟踪输出(辅助优化)
如果只是想减少绑定相关的调试干扰信息,可以在App.xaml中关闭绑定的跟踪输出,添加如下资源配置:<Application.Resources> <Style TargetType="ListView"> <Setter Property="ItemsSource" Value="{Binding Movies, PresentationTraceSources.TraceLevel=None}"/> </Style> </Application.Resources>这个设置主要是减少调试窗口的绑定日志输出,对步进流程的直接影响有限,但能让调试界面更清爽。
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

