升级 .NET 版本后,TwoWay 或 OneWayToSource 绑定无法在只读属性上工作
Posted
技术标签:
【中文标题】升级 .NET 版本后,TwoWay 或 OneWayToSource 绑定无法在只读属性上工作【英文标题】:A TwoWay or OneWayToSource binding cannot work on the read-only property after upgrading the .NET version 【发布时间】:2019-02-08 04:50:14 【问题描述】:我有目标框架版本为4.5
的 WPF 应用程序。现在我已经切换到版本4.6.2
。
之后,我在多个地方收到以下错误。
A TwoWay or OneWayToSource binding cannot work on the read-only property
我正在使用Visual Studio 2017
。
将该项目称为A
,它有B, C, D as dependencies
。虽然 B、C 和 D 已附加 as DLL
,但我收到了错误消息。如果他们附加as projects
我没有收到错误。
注意:所有 B、C、D 都是 4.5 版本的项目,我不会为了运行这个项目而将它们更改为 4.6.2。
任何人都可以告诉我如何在此处进一步进行以及在接近的方式中是否有任何错误?
更新 1:
相关问题与我的情况不同:
A TwoWay or OneWayToSource binding cannot work on the read-only property
更新 2:
下面的问题类似。
A TwoWay or OneWayToSource binding cannot work on the read-only property。
但答案中提供的链接似乎已损坏或重定向:
https://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding
【问题讨论】:
是否有任何特定的控件会引发错误? 这是一个应用程序,我不确定它是否与应用程序中使用的任何特定控件相关,我可以在多个地方找到问题。 您是否修改了任何现有的 ViewModel?即您是否从视图模型中删除了属性设置器? 我没有更改代码,该项目在 4.5 中运行良好。我刚刚更改了框架版本,我得到了错误。 按照您发布的链接后,我发现 .Net 4.5 中存在一个错误,当您使用带有私有设置器的属性的双向绑定时,它不会引发错误。这已在 .Net 4.7 中修复。除了公开您的私人二传手之外,我认为没有简单的解决方法。 【参考方案1】:我知道已经晚了一年,但如果有人遇到这个问题,那就是已知问题。框架升级后,我的部分 UI 开始抛出 InvalidOperationException。修复很简单,只需在绑定中添加显式 Mode=OneWay 即可。但是我仍然需要知道如果在很长一段时间内没有人更改代码中的任何内容,它为什么会开始。
我在这里找到了解决方案:https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/retargeting/4.5-4.6.1#two-way-data-binding-to-a-property-with-a-non-public-setter-is-not-supported
在没有公共设置器的情况下尝试将数据绑定到属性从来都不是受支持的方案。从 .NET Framework 4.5.1 开始,此方案将引发 InvalidOperationException。请注意,只有专门针对 .NET Framework 4.5.1 的应用才会引发此新异常。如果应用以 .NET Framework 4.5 为目标,则允许调用。如果应用不针对特定的 .NET Framework 版本,则绑定将被视为单向。
问题一直存在,只是在发生时才开始抛出异常。
【讨论】:
我今天遇到了完全相同的问题,我从目标 4.5 更新到 4.7.2,但是只有在正常运行可执行文件时才会抛出异常。如果我在附加调试器的情况下运行它,并且应用程序正常运行......想象一下我在编译版本时感到惊讶,从 VS 运行,一切都很好,然后部署到客户和 bam,我收到错误报告......以上是关于升级 .NET 版本后,TwoWay 或 OneWayToSource 绑定无法在只读属性上工作的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作
InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作