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(对象项,对象信息)内部异常:
有什么关于我是什么的想法吗?
将setter设为公共设置,或显式将Binding.Mode
设置为OneWay
。
您的setter是私有的,可以将绑定指定为模式OneWay,也可以从setter 中删除私有
在我非常愚蠢的情况下,我忘记为属性定义一个setter,使其成为只读的。只有我的2美分给那些工作太晚的人。
对于那些在不使用PropertyChanged
的情况下发现此问题的人
无论是否使用PropertyChanged
,当您有一个计算属性(不带setter)并且用户试图编辑列时,也会引发此异常。那么,将整个DataGrid设置为IsReadOnly="True"
或仅将列设置为ReadOnly就足够了。