【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修饰,否则该属性则会被定义为只读属性

相关推荐
沉到海底去吧Go4 小时前
【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
ocr·wpf·图片识别改名·图片识别重命名·图片内容改名
lph19724 小时前
自定义事件wpf
wpf
code bean8 小时前
【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
wpf
碎碎念的安静19 小时前
WPF可拖拽ListView
c#·wpf
界面开发小八哥1 天前
界面组件DevExpress WPF中文教程:Grid - 如何识别行和卡片?
.net·wpf·界面控件·devexpress·ui开发
TwilightLemon3 天前
WPF 使用CompositionTarget.Rendering实现平滑流畅滚动的ScrollViewer,支持滚轮、触控板、触摸屏和笔
wpf
Vae_Mars4 天前
WPF中自定义消息弹窗
wpf
Magnum Lehar4 天前
GameEngine游戏引擎前端界面wpf页面实现
前端·游戏引擎·wpf
TA远方5 天前
【C#】一个简单的http服务器项目开发过程详解
服务器·http·c#·wpf·web·winform·console
陈奕昆5 天前
2.1HarmonyOS NEXT开发工具链进阶:DevEco Studio深度实践
华为·wpf·harmonyos