当前位置: 首页 > article >正文

WFP Listbox绑定数据后,数据变化的刷新

Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。

使用ObservableCollection集合

解决问题的方法:

  1. 将数组替换为 ObservableCollection
    ObservableCollection 是专为绑定设计的集合类型,可以通知 WPF 绑定的集合数据发生变化。

如果本身是List,可以修改为:

using System.Collections.ObjectModel;

public ObservableCollection<MyItem> MyItems { get; set; }

public MainViewModel()
{
    MyItems = new ObservableCollection<MyItem>
    {
        new MyItem { showsafeui = true, SomeOtherProperty = "Item 1" },
        new MyItem { showsafeui = false, SomeOtherProperty = "Item 2" },
        new MyItem { showsafeui = true, SomeOtherProperty = "Item 3" }
    };
}

// 动态添加或删除数据
public void AddNewItem()
{
    MyItems.Add(new MyItem { showsafeui = true, SomeOtherProperty = "New Item" });
}

public void RemoveItem()
{
    if (MyItems.Any())
        MyItems.RemoveAt(0);
}

使用 ObservableCollection 后,新增、删除、或重新排序数据时,ListBox 会自动刷新。

数据内容变化的刷新INotifyPropertyChanged

上面的数据,如果某个属性的内容发生了变化如何刷新。可以使用INotifyPropertyChanged。

public class HeartInfo : INotifyPropertyChanged
{
    public int id { get; set; }
    public bool showsafeui{ get; set; }
    
	public event PropertyChangedEventHandler PropertyChanged;
	protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
	{
	    Console.WriteLine("刷新UI------------");
	    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
	}
}

刷新单个数据

这样在某个属性变化的时候,可以

	public bool showsafeui
    {
        get => _showsafeui;
        set
        {
            if (_showsafeui != value)
            {
                _showsafeui = value;
                OnPropertyChanged(); // 通知绑定属性更改
            }
        }
    }

刷新多个数据

如果某个属性变化需要刷新多个

	private bool _showsafe;

    public bool showsafe
    {
        get => _showsafe;
        set
        {
            if (_showsafe != value)
            {
                _showsafe = value;
                OnPropertyChanged(); // 通知绑定的 showsafe 属性
                OnPropertyChanged(nameof(showsafeui)); // 通知绑定的 showsafeui 属性
            }
        }
    }

简化刷新所有

我每次都想有一个属性变化,刷新所有属性
可以OnPropertyChanged(string.Empty)传入空

	private int _updateall  = 0;
	public int updateall 
	{
    	get { 
    	return _updateuistat;
    }
    set {
        if (_updateall!= value) { 
            _updateall= 0; 
            OnPropertyChanged(string.Empty); 
        }
    }  //刷新ui
}

这样我每次属性变化都调用updateall = 1,就全部刷新了。


http://www.kler.cn/a/461351.html

相关文章:

  • 安装PyQt5-tools卡在Preparing metadata (pyproject.toml)解决办法
  • kubernetes学习-kubectl命令、探针(二)
  • Ubuntu Server安装谷歌浏览器
  • C++ hashtable
  • 算法-判断4的次幂
  • 苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用
  • 31.九个按钮排列 C#例子 WPF例子
  • 如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程
  • HTML基础到精通笔记
  • GitHub Fork 和 Clone 的深度指南:操作解析与 Pull Request 完整流程20241231
  • python浅拷贝和深拷贝
  • 【每日学点鸿蒙知识】文件读写、屏幕宽度亮度、扫一扫权限、编码器问题、wlan设置
  • “库存管理软件的用户体验”:界面与交互设计
  • rust_shyper
  • flux文生图模型实践
  • #渗透测试#红蓝攻防#红队bypass突破口总结06
  • jeecgbootvue3列表数据状态为数字时,手动赋值的三种方法
  • Python 实现 冒泡排序算法示例
  • SQL Server实现将分组的其他字段数据拼接成一条数据
  • python 快速排序(Quick Sort)
  • 本地LLM部署--llama.cpp
  • 【Qt笔记】QLineEdit控件详解
  • 当下热点系列 篇二:大消费题材解析和股票梳理
  • 动手学深度学习-深度学习计算-3延后初始化
  • 它真的可以绕过 ICloud 激活吗
  • redis的使用