InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作
Posted
技术标签:
【中文标题】InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作【英文标题】:InvalidOperationException - A TwoWay or OneWayToSource binding cannot work on the read-only property 【发布时间】:2012-02-05 02:04:33 【问题描述】:我正在使用 MVVM 模式,当我运行我的应用程序时收到以下信息
无效操作异常 TwoWay 或 OneWayToSource 绑定无法在“ViewModel.SynergyViewModel”类型的只读属性“Options”上工作。
我已经在我的视图模型中注释掉了我所有的源代码,并把它追溯到了一个复选框。如果我在应用程序运行的视图模型中注释掉复选框或属性,减去功能。下面我列出了我的复选框和视图模型中的属性的代码。
<CheckBox Grid.Column="4" HorizontalAlignment="Right" Margin="5,0,5,5" IsChecked="Binding Options" Content="Options"/>
private bool _Options;
public bool Options
get
return _Options;
private set
if (_Options == value)
return;
_Options = value;
OnPropertyChanged("Options");
发生 System.InvalidOperationException Message=A TwoWay 或 OneWayToSource 绑定无法在“ViewModel.MyViewModel”类型的只读属性“Options”上工作。 来源=演示框架 堆栈跟踪: 在 MS.Internal.Data.PropertyPathWorker.CheckReadOnly(对象项,对象信息) 内部异常:
关于我在这里缺少什么的任何想法?
【问题讨论】:
A TwoWay or OneWayToSource binding cannot work on the read-only property的可能重复 【参考方案1】:要么公开你的 setter,要么明确地将 Binding.Mode
设置为 OneWay
。
【讨论】:
如果您在安装了 .net 4.5 的机器上开发 .net 4.0 WPF 项目,您在开发过程中不会遇到此错误!微软需要解决这个问题。 很奇怪,我在使用内部设置器时遇到了同样的错误......我本以为允许使用内部设置器,但奇怪的是没有。 我希望这个答案能指定如何将 Binding.Mode 设置为 OneWay - 我在哪里可以做到这一点?在集合中? IsChecked="Binding Options, Mode=OneWay"【参考方案2】:您的 setter 是私有的,要么将绑定指定为模式 OneWay,要么从 setter 中删除私有
【讨论】:
【参考方案3】:在我绝对愚蠢的情况下,我忘记为属性定义一个设置器,使它成为只读的。对于那些工作太晚的人,只需我的 2 美分。
【讨论】:
【参考方案4】:对于那些没有使用PropertyChanged
的人来说发现这个
无论是否使用PropertyChanged
,当你有一个计算属性(没有setter)并且用户试图编辑列时也会抛出这个异常。将整个 DataGrid 设置为 IsReadOnly="True"
或仅将列设置为 ReadOnly 就足够了。
【讨论】:
以上是关于InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException:未找到名为“Bearer”的 AuthorizationPolicy
为啥这个 OdbcConnection 会抛出 System.InvalidOperationException?
System.InvalidOperationException: '绑定实例已经被关联到监听
使用 PerformanceCounters 时获取 InvalidOperationException [关闭]