【WPF】解决无法对“xxx”类型的只读属性“xxx”进行TwoWay或OneWayToSource绑定
2023-12-13 13:14:56
System.InvalidOperationException:“无法对“AowisingWincc.ViewModels.DialogScanDevicesViewModel”类型的只读属性“IOTGtatewayDeviceId”进行 TwoWay 或 OneWayToSource 绑定。”
这个异常是由于在进行数据绑定时,尝试将只读属性(IOTGtatewayDeviceId)设置为双向(TwoWay)或者从目标到源(OneWayToSource)的绑定方式引起的。
只读属性是指只有 getter 方法而没有 setter 方法的属性,因此无法从界面更改其值。在数据绑定过程中,如果将只读属性设置为双向或者从目标到源的绑定方式,会导致无法更新该属性的值,从而引发该异常。
解决这个问题的方式是将数据绑定的模式更改为单向(OneWay)或者从源到目标(OneWay)的绑定方式,以保持只读属性的值不被更改。或者,如果你需要在界面上更改该属性的值,你需要提供一个 setter 方法来允许更改。
请检查你的数据绑定代码,确保对只读属性的绑定使用了正确的绑定模式。
错误写法
- 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
public string? IOTGtatewayDeviceId
{
get => _iotGtatewayDeviceId;
private set => SetProperty(ref _iotGtatewayDeviceId, value);
}
正确写法
去掉 private
- csharp
public string? IOTGtatewayDeviceId
{
get => _iotGtatewayDeviceId;
set => SetProperty(ref _iotGtatewayDeviceId, value);
}
总结
不能对set方法进行private修饰,否则该属性则会被定义为只读属性
文章来源:https://blog.csdn.net/gao511147456/article/details/134842638
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!