【WPF】解决无法对“xxx”类型的只读属性“xxx”进行TwoWay或OneWayToSource绑定

System.InvalidOperationException:"无法对"AowisingWincc.ViewModels.DialogScanDevicesViewModel"类型的只读属性"IOTGtatewayDeviceId"进行 TwoWay 或 OneWayToSource 绑定。"

这个异常是由于在进行数据绑定时,尝试将只读属性(IOTGtatewayDeviceId)设置为双向(TwoWay)或者从目标到源(OneWayToSource)的绑定方式引起的。

只读属性是指只有 getter 方法而没有 setter 方法的属性,因此无法从界面更改其值。在数据绑定过程中,如果将只读属性设置为双向或者从目标到源的绑定方式,会导致无法更新该属性的值,从而引发该异常。

解决这个问题的方式是将数据绑定的模式更改为单向(OneWay)或者从源到目标(OneWay)的绑定方式,以保持只读属性的值不被更改。或者,如果你需要在界面上更改该属性的值,你需要提供一个 setter 方法来允许更改。

请检查你的数据绑定代码,确保对只读属性的绑定使用了正确的绑定模式。

错误写法

  • xaml
xaml 复制代码
<TextBox
	Width="256"
	Margin="0,10,10,0"
	VerticalAlignment="Top"
	materialDesign:HintAssist.HelperText="主机,首页中查看ID"
	materialDesign:HintAssist.Hint="主机ID"
	Style="{StaticResource MaterialDesignOutlinedTextBox}">
	 <TextBox.Text>
		 <Binding Path="IOTGtatewayDeviceId" UpdateSourceTrigger="PropertyChanged" />
	</TextBox.Text>
</TextBox>
  • csharp
csharp 复制代码
        public string? IOTGtatewayDeviceId
        {
            get => _iotGtatewayDeviceId;
            private set => SetProperty(ref _iotGtatewayDeviceId, value);
        }

正确写法

去掉 private

  • csharp
csharp 复制代码
        public string? IOTGtatewayDeviceId
        {
            get => _iotGtatewayDeviceId;
            set => SetProperty(ref _iotGtatewayDeviceId, value);
        }

总结

不能对set方法进行private修饰,否则该属性则会被定义为只读属性

相关推荐
FuckPatience19 小时前
WPF 具有跨线程功能的UI元素
wpf
诗仙&李白21 小时前
HEFrame.WpfUI :一个现代化的 开源 WPF UI库
ui·开源·wpf
He BianGu1 天前
【笔记】在WPF中Binding里的详细功能介绍
笔记·wpf
He BianGu1 天前
【笔记】在WPF中 BulletDecorator 的功能、使用方式并对比 HeaderedContentControl 与常见 Panel 布局的区别
笔记·wpf
123梦野2 天前
WPF——效果和可视化对象
wpf
He BianGu2 天前
【笔记】在WPF中Decorator是什么以及何时优先考虑 Decorator 派生类
笔记·wpf
时光追逐者3 天前
一款专门为 WPF 打造的开源 Office 风格用户界面控件库
ui·开源·c#·.net·wpf
He BianGu3 天前
【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能
笔记·wpf
Rotion_深3 天前
C# WPF使用线程池运行Action方法
c#·wpf·线程池
攻城狮CSU4 天前
WPF 深入系列.2.布局系统.尺寸属性
wpf