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 [关闭]

System.InvalidOperationException: 'XML 文档 (1, 1) 中存在错误。'

InvalidOperationException:LINQ 表达式“GroupByShaperExpression: