gpt4 book ai didi

WPF BindingExpression System.Windows.Data 错误 : Need filename or class name (Dependency Injection/MEF)

转载 作者:行者123 更新时间:2023-12-03 10:25:32 26 4
gpt4 key购买 nike

当这些错误发生时,有没有办法查看正在实例化哪个 UserControl/Window/etc?

一个典型的错误如下所示:

System.Windows.Data Error: 40 : BindingExpression path error: 'BackgroundColor' property not found on 'object' ''MapContainerViewModel' (HashCode=25350572)'. BindingExpression:Path=BackgroundColor; DataItem='MapContainerViewModel' (HashCode=25350572); target element is 'SolidColorBrush' (HashCode=35109313); target property is 'Color' (type 'Color')

问题?它发生在哪里?在哪个 XAML 文件中?在哪个级别?

你得到一个症状列表,但没有病人的名字,这不是很奇怪吗?

在一个小项目中,我可能会知道去哪里找。我目前正在重构一个包含数百个 Windows/UserControls 的 MVVM 项目,其中许多具有相似的绑定(bind)路径。

因此,我必须对属性名称进行“整个解决方案”搜索,并提供一个候选列表(UserControls/Windows),这些候选列表在实例化时可能会导致绑定(bind)错误。

另一种选择是让 Visual Studio 中断并在发生 System.Windows.Data 错误时立即向我显示 XAML。遵循 this one 之类的教程,我可以让代码中断——但它不指示任何 XAML 或类名。堆栈跟踪没有显示任何内容——因为控件是通过 MEF 自动创建的。

谢谢你的帮助。
乍得。

更新:

在这种情况下,Live Visual Tree 不起作用,因为有问题的 UserControls/Windows 位于 MEF 容器中并且没有附加。

任何可视化方法都不起作用,因为 View /数据上下文(在本例中为 View 模型)是通过 MEF(DI 模式)实例化的,并且正在等待添加到可视化树中。

enter image description here

最佳答案

调试器不会在 XAML 方面为您提供太多帮助。这是因为 XAML 是声明性的,而调试器是为命令式代码设计的。对于 WPF,您需要依赖不同的工具集,特别是 VS2017 中的 Live Visual Tree 和 Live Property Explorer。

这是一个带有几个文本框控件的简单 WPF 应用程序。

enter image description here

文本框控件之一不起作用。我如何找到它?首先打开 Live 可视化树。单击 WPF 工具栏中的启用选择按钮(第二个按钮)。然后选择不工作的控件。实时视觉树将选择控件。

enter image description here

现在选择 Live Visual Tree (FirstValueField) 中的 TextBox 父控件。现在打开 Live Property Explorer。

enter image description here

请注意 Text 属性周围的黄色框。这就是错误所在。单击属性字段的右侧并选择“转到源”。

enter image description here

所以这就是错误所在。您可以看到我在哪里更改了代码以引入错误。

这是调试 WPF、XAML 或任何声明性代码的一般方法: (1) 放弃调试器……它只会妨碍您; (2) 学习如何使用适合的工具来查找错误; (3) 如果这不起作用,请使用打印语句。

根据我的经验,WPF 工具非常适合查找常见错误。然而,您的 WPF 变得越复杂,您就越需要嵌入代码来诊断和识别问题。

关于WPF BindingExpression System.Windows.Data 错误 : Need filename or class name (Dependency Injection/MEF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57437693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com