InvalidOperationException-TwoWay或OneWayToSource绑定无法在只读属性上工作

本文关键字:只读属性 工作 OneWayToSource 绑定 InvalidOperationException-TwoWay | 更新日期: 2023-09-27 18:19:52

我正在使用MVVM模式,并且在运行应用时收到以下消息

InvalidOperationExceptionTwoWay或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.InvalidOperationExceptionMessage=TwoWay或OneWayToSource绑定无法在类型为"ViewModel.MyViewModel"的只读属性"Options"上工作。Source=PresentationFrameStackTrace:位于MS.Internal.Data.PropertyPathWorker.CheckReadOnly(对象项,对象信息)内部异常:

有什么关于我是什么的想法吗?

InvalidOperationException-TwoWay或OneWayToSource绑定无法在只读属性上工作

将setter设为公共设置,或显式将Binding.Mode设置为OneWay

您的setter是私有的,可以将绑定指定为模式OneWay,也可以从setter 中删除私有

在我非常愚蠢的情况下,我忘记为属性定义一个setter,使其成为只读的。只有我的2美分给那些工作太晚的人。

对于那些在不使用PropertyChanged的情况下发现此问题的人

无论是否使用PropertyChanged,当您有一个计算属性(不带setter)并且用户试图编辑列时,也会引发此异常。那么,将整个DataGrid设置为IsReadOnly="True"或仅将列设置为ReadOnly就足够了。