WPF||静态数据绑定不更新的坑

WPF的MVVM模式提供的数据绑定方式简单化了数据更新反馈到界面的步骤,但是在静态数据绑定时需要使用事件调用方法向程序发送调用通知。

需要注意使用PropertyChanged的方法是无效的:
ViewModel的代码:

		private static string _connectstr;
        public static string ConnectStr
        {
            get { return _connectstr; }
            set
            {
                _connectstr = value;
                //调用通知
                StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(_connectstr)));
            }
        }
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;//静态事件处理属性更改

界面内设置的代码:

<TextBlock Text="{Binding Path=(viewmodel:MainViewModel.ConnectStr)}" 
Margin="15 15 0 0" FontSize="26" Foreground="#007DFA" Canvas.Right="18"/>

如上,采用PropertyChanged的方法在实际的程序运行过程中,界面只会在初始化阶段采用静态变量ConnectStr的值。

根据链接的解答,在指定 Path 属性时,绑定将定位静态变量并绑定到该属性 . 在这种情况下,静态变量ConnectStr的属性是源, 而StaticPropertyChanged 事件用于通知绑定有关更新 。可以注意到,INotifyPropertyChanged 在绑定到静态属性的情况下不能使用,因为没有实例用于访问该属性 . 必须使用相应的静态事件。
这里,可以使用EventHandler (事件仅通知相应属性的更改),对代码作如下更改:

		//静态属性调用通知
        public static event EventHandler ConnectStrChanged;
		private static string _connectstr;
        public static string ConnectStr
        {
            get { return _connectstr; }
            set
            {
                _connectstr = value;
                //调用通知
                ConnectStrChanged?.Invoke(null, EventArgs.Empty);
                //StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(_connectstr)));
            }
        }

现在可以在初始化阶段以外更新静态变量ConnectStr的值到界面中。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值