ABP框架下MVVM的Binding值不刷新问题

小海贼 2021-04-02 02:10:52



Model部分代码:


public class UcHDZCQViewModel : Screen
{
public string MacConnectedStatus
{
get
{

if (this.service != null && this.service.TranService != null && this.service.TranService.IsConnected)
return "已连接";
return "断开";
}
}

}
下面是界面绑定代码
<Label HorizontalAlignment="Center" FontSize="10pt">设备连接状态</Label>
<Label Margin="10,10,10,10" Height="40" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Content="{Binding MacConnectedStatus}" Foreground="White">
<Label.Resources>
<Style TargetType="Label">

<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Content}" Value="已连接">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Content}" Value="断开">
<Setter Property="Background" Value="Maroon"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Resources>
</Label>



问题说明:
this.service.TranService.IsConnected是一个窜口对象是否打开的标识,IsConnected 也是只读的属性,返回的是serialPort类的IsOpen属性。为什么窜口断开了Label不跟着更新??
...全文
541 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2021-05-24
  • 打赏
  • 举报
回复
引用 7 楼 小海贼 的回复:
[quote=引用 4 楼 ziqi0716 的回复:]MacConnectedStatus属性写的不合适。 如果是我,我会这么处理: public string MacConnectedStatus{get;private set;}//提供给View来绑定。 //当串口断开或连接时候,修改MacConnectedStatus的值 MacConnectedStatus=“已断开”;或者 MacConnectedStatus=“已连接”; 并加上这个: RaisePropertyChanged(nemeof(MacConnectedStatus));//触发属性更改事件,通知绑定这个属性的view更新。 代码段的写法也可以,这里就不啰嗦了。 总结: 就是说,你的vm中定义的属性应该简洁。至于这个属性值的修改,应该放在真正应该触发的地方,比如串口对象的事件处理函数中(串口连接,串口断开)。另外记得实现INotifyPropertyChanged接口,用于通知属性变更。
我引入了包PropertyChanged.Fody,添加了AddINotifyPropertyChangedInterface接口,不用再实现INotifyPropertyChanged 这个了。 其中的原因是窜口类未实现这个接口的原因,窜口类是微软封装的,我们也无法改变。所以这个就办法解决了。[/quote] 串口类你可以自己包装一下啊,搞个SerialPortViewModel类,将各个属性做个适配转换,实现INotifyPropertyChanged接口.变通一下!
小海贼 2021-05-23
  • 打赏
  • 举报
回复
引用 2 楼 以专业开发人员为伍 的回复:
Binding 只能识别几种指定的接口触发的事件 ,你的 MacConnectedStatus 到底触发了什么事件给 Binding 了?
我引入了包PropertyChanged.Fody,添加了AddINotifyPropertyChangedInterface接口,不用再实现INotifyPropertyChanged 这个了。 其中的原因是窜口类未实现这个接口的原因,窜口类是微软封装的,我们也无法改变。所以这个就办法解决了。
小海贼 2021-05-23
  • 打赏
  • 举报
回复
引用 4 楼 ziqi0716 的回复:
MacConnectedStatus属性写的不合适。 如果是我,我会这么处理: public string MacConnectedStatus{get;private set;}//提供给View来绑定。 //当串口断开或连接时候,修改MacConnectedStatus的值 MacConnectedStatus=“已断开”;或者 MacConnectedStatus=“已连接”; 并加上这个: RaisePropertyChanged(nemeof(MacConnectedStatus));//触发属性更改事件,通知绑定这个属性的view更新。 代码段的写法也可以,这里就不啰嗦了。 总结: 就是说,你的vm中定义的属性应该简洁。至于这个属性值的修改,应该放在真正应该触发的地方,比如串口对象的事件处理函数中(串口连接,串口断开)。另外记得实现INotifyPropertyChanged接口,用于通知属性变更。
我引入了包PropertyChanged.Fody,添加了AddINotifyPropertyChangedInterface接口,不用再实现INotifyPropertyChanged 这个了。 其中的原因是窜口类未实现这个接口的原因,窜口类是微软封装的,我们也无法改变。所以这个就办法解决了。
小海贼 2021-05-23
  • 打赏
  • 举报
回复
引用 5 楼 哎呀哇 的回复:
INotifyPropertyChanged 这个接口了解一下 普通属性变更是不触发通知的
我引入了包PropertyChanged.Fody,添加了AddINotifyPropertyChangedInterface接口,不用再实现INotifyPropertyChanged 这个了。 其中的原因是窜口类未实现这个接口的原因,窜口类是微软封装的,我们也无法改变。所以这个就办法解决了。
ziqi0716 2021-04-06
  • 打赏
  • 举报
回复
MacConnectedStatus属性写的不合适。 如果是我,我会这么处理: public string MacConnectedStatus{get;private set;}//提供给View来绑定。 //当串口断开或连接时候,修改MacConnectedStatus的值 MacConnectedStatus=“已断开”;或者 MacConnectedStatus=“已连接”; 并加上这个: RaisePropertyChanged(nemeof(MacConnectedStatus));//触发属性更改事件,通知绑定这个属性的view更新。 代码段的写法也可以,这里就不啰嗦了。 总结: 就是说,你的vm中定义的属性应该简洁。至于这个属性值的修改,应该放在真正应该触发的地方,比如串口对象的事件处理函数中(串口连接,串口断开)。另外记得实现INotifyPropertyChanged接口,用于通知属性变更。
Lvwl-CN 2021-04-06
  • 打赏
  • 举报
回复
INotifyPropertyChanged 这个接口了解一下 普通属性变更是不触发通知的
  • 打赏
  • 举报
回复
WPF 由于需要支持解释脚本式的程序,它大量地使用了“动态”特性,因此它在程序验证检查方面非常弱,它写出的程序不再是干净的、可在编译器就检查出大量bug的了。加上 WPF 引入了太多的动态类型,使得需要查资料、各种“想不到”的学习难度陡增,这就是 WPF 被诟病的主要原因。
  • 打赏
  • 举报
回复
Binding 只能识别几种指定的接口触发的事件 ,你的 MacConnectedStatus 到底触发了什么事件给 Binding 了?
小海贼 2021-04-02
  • 打赏
  • 举报
回复
难道没有人来回复一下?
代码下载链接: https://pan.quark.cn/s/90fbf78c3289 "1元云购"是一种依托互联网的购物方式,用户仅需投入微小的资金(一般为一元)便有机会赢取高价值商品。此类模式常借助抽奖机制来判定获胜者,从而吸引众多用户加入。"1元云购源代码"是承载该业务流程的程序代码,其用途在于搭建一个完整的1元云购系统。 在构建1元云购源代码的过程中,主要包含以下几个核心技术要点: 1. **数据库架构**:为了有效存储商品详情、用户资料、交易历史及开奖结果,必须设计科学合理的数据库框架。这包括商品数据表、用户信息表、订单记录表和开奖记录表等,确保数据的统一性与完整性。 2. **支付渠道对接**:1元云购平台需与第三方支付服务(例如支付宝、微信支付)进行对接,以实现用户的在线支付操作。这涉及API接口调用、交易状态同步、退款流程管理等环节。 3. **随机数生成策略**:抽奖过程的核心在于公平透明地选定获奖者,通常采用随机数生成策略来实现。该策略需保障每位参与者拥有相等的获奖机会,同时防止欺诈行为。 4. **用户界面开发**:卓越的用户体验是吸引参与者的关键因素。前端页面应兼具视觉吸引力与操作便捷性,清晰展示商品信息、购买步骤、中奖规范等,并提供用户注册、登录、查询订单等功能。 5. **服务器程序设计**:后端系统负责处理用户请求,如管理订单、计算中奖号码、更新数据库信息等。这部分通常采用PHP等服务器端技术实现,需应对并发访问与高负载情形。 6. **安全措施**:1元云购平台可能面临恶意攻击,例如SQL注入、XSS跨站脚本攻击等。因此,源代码需遵循安全编程准则,对用户输入进行过滤与校验,同时运用HTTPS等加密手段保障数据传输安全。 7. **...

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧