C# 如何调试一个";DependencyProperty.UnserValue“;我的WPF/MVVM应用程序中是否存在异常?
我有一个C#/.Net/WPF/MVVM应用程序 在VS 2015中运行时,应用程序运行良好 当我独立运行应用程序时(在不同的机器上), 我在启动时遇到以下异常: “System.InvalidOperationException”类型的未处理异常 发生在WindowsBase.dll中 附加信息“{DependencyProperty.UnserValue}不是有效的 属性“TopLevelItemTemplateKey”的值 到底发生了什么 如何调试这个C# 如何调试一个";DependencyProperty.UnserValue“;我的WPF/MVVM应用程序中是否存在异常?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个C#/.Net/WPF/MVVM应用程序 在VS 2015中运行时,应用程序运行良好 当我独立运行应用程序时(在不同的机器上), 我在启动时遇到以下异常: “System.InvalidOperationException”类型的未处理异常 发生在WindowsBase.dll中 附加信息“{DependencyProperty.UnserValue}不是有效的 属性“TopLevelItemTemplateKey”的值 到底发生了什么 如何调试这个 谢谢您是否在获取依赖项时直接返回您的
谢谢您是否在获取依赖项时直接返回您的值?最好的方法是在返回变量之前测试变量是否为空。这里是一个带有
ObservableCollection的示例
:
public ObservableCollection<YourObject> _ocYourObject;
public ObservableCollection<YourObject> ocYourObject{
get {
if (_ocYourObject == null) {
_ocYourObject = new ObservableCollection<YourObject>();
}
return _ocYourObject;
}
set {
if (_ocYourObject!= value) {
_ocYourObject= value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ocYourObject)));
}
}
}
公共可观察收集对象;
公共可观测收集对象{
得到{
如果(_=null){
_OciourObject=新的ObservableCollection();
}
返回(u)对象;;
}
设置{
if(_ocYourObject!=值){
_对象=值;
PropertyChanged(这是新的PropertyChangedEventArgs(名称)(ocYourObject));
}
}
}
Safe:当我在VS调试器中时,这似乎很奇怪。我有几个可观察的集合。我会检查并更改它们,看看是否解决了它。这可能会发生在任何对象上。你应该使用log4net之类的日志框架来记录异常,看看哪一行是错误安全的:完全忘记了log4net.Thx,我将在log4net中添加。看看绑定到TopLevelItemTemplateKey
属性的内容。我猜它可能是您注册的依赖性属性,没有默认值。在这种情况下,只需向元数据添加默认值:DependencyProperty.Register(“State”、typeof(Boolean)、typeof(MyStateControl),新属性元数据(false));