最近在帮一些小伙伴解决问题时,会遇到各种奇奇怪怪的问题。
比较典型的包括
命名空间错误,如System.Drawing.Brushes类型和System.Windows.Media.Brushes类型错误使用,导致在Converter中,颜色转换不生效。
数据绑定错误,这个导致的原因比较多,所以这里我们总结一下如何调试数据绑定。
1、使用Visuaal Studio错误列表的输出信息调试
假设我们定义了一个MyProperty属性
1 public class MainWindowViewModel : INotifyPropertyChanged 2 { 3 private string myProperty; 4 5 public string MyProperty 6 { 7 get => myProperty; 8 set 9 { 10 myProperty = value; 11 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("MyProperty")); 12 } 13 } 14 15 public event PropertyChangedEventHandler PropertyChanged; 16 }
在界面上进行绑定,因为拼写错误,将MyProperty写成了MyProprety
1 <Grid> 2 <Label Content="{Binding MyProprety}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"></Label> 3 </Grid>
正常运行时,会发现界面没有内容显示,调试时发现属性赋值又正常,这个时候我们可以借助XAML绑定失败窗口查看输出信息
选择【调试】-》【窗口】-》【XAML绑定失败】菜单,打开XAML绑定失败窗口。
错误信息如下:
将绑定错误输出到文本文件
首先我们打开App.config,在configuration节点下增加如下内容
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 4 ...... 5 6 <!--诊断信息输出--> 7 <system.diagnostics> 8 <sources> 9 <source name="System.Windows.Data" switchName="SourceSwitch"> 10 <listeners> 11 <add name="textFileListener" /> 12 </listeners> 13 </source> 14 </sources> 15 <switches> 16 <add name="SourceSwitch" value="All" /> 17 </switches> 18 <sharedListeners> 19 <add name="textFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="DebugTrace.txt" /> 20 </sharedListeners> 21 <trace autoflush="true" indentsize="4" /> 22 </system.diagnostics> 23 </configuration>
上面的配置可以创建一个跟踪源,它可以捕获从 System.Windows.Data命名空间中的调试信息。
每个跟踪源都可配置为输出两种级别的调试信息:警告(Warning)、错误(Error)或两者(ALL)。
每个跟踪源还可以有一个或多个监听器,作为调试输出的目标。
我们这里配置了一个System.Diagnostics.TextWriterTraceListener 将错误输出到 DebugTrace.txt 文件,也可以把调试信息输出到控制台或 XML 文件。
应用程序运行时,在运行目录下会生成一个DebugTrace.txt 文件,它里面记录了包括数据绑定的错误日志和其它任何程序运行时的错误信息。
说明:
1、除了TextWriterTraceListener还可以使用以下几种Listener:
ConsoleTraceListener 、DelimitedListTraceListener 、EventSchemaTraceListener和XmlWriterTraceListener。 2、诊断信息仅在调试时输出,不在Visual Studio中调试不会输出诊断信息 程序运行后,可以在运行路径下找到DebugTrace.txt,输出内容如下:
使用PresentationTraceSources.TraceLevel附加属性
参考资料
https://learn.microsoft.com/zh-cn/dotnet/api/system.diagnostics.presentationtracesources?view=windowsdesktop-8.0
标签:输出,错误,绑定,System,WPF,调试,MyProperty From: https://www.cnblogs.com/zhaotianff/p/18552648