InvalidOperationException - TwoWay或OneWayToSource绑定无法在只读属性上运行

时间:2012-01-07 21:11:08

标签: c# wpf xaml data-binding mvvm

我正在使用MVVM模式,并在运行我的应用程序时收到以下内容

出现InvalidOperationException TwoWay或OneWayToSource绑定无法对“ViewModel.SynergyViewModel”类型的只读属性“选项”起作用。

我在我的视图模型中评论了我的所有源代码,并将其追溯到一个复选框。如果我注释掉我的视图模型中的复选框或正确性,应用程序运行,减去功能。下面我列出了我的复选框的代码和viewmodel中的属性。

<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 = TwoWay或OneWayToSource绑定不能对“ViewModel.MyViewModel”类型的只读属性“Options”起作用。   来源= PresentationFramework   堆栈跟踪:        在MS.Internal.Data.PropertyPathWorker.CheckReadOnly(对象项,对象信息)   InnerException:

关于我在这里缺少什么的任何想法?

4 个答案:

答案 0 :(得分:22)

将您的setter设为公开或明确将Binding.Mode设置为OneWay

答案 1 :(得分:1)

你的setter是私有的,要么将绑定指定为模式OneWay,要么从setter中删除私有

答案 2 :(得分:0)

在我绝对愚蠢的情况下,我忘了为属性定义一个setter,使其成为只读。对于那些工作太晚的人来说,只有我的2美分。

答案 3 :(得分:0)

对于那些不使用PropertyChanged

的人

无论是否使用PropertyChanged,当您具有计算所得的属性(无设置器)并且用户尝试编辑该列时,也会引发此异常。这样,将整个DataGrid设置为IsReadOnly="True"或仅将列设置为ReadOnly就足够了。