ObservableCollection子项属性字段值变化的监听处理

ViewModel代码


var userList = new List < GroupSelectMemberItemVo > ();
foreach(ChatGroupUserRes chatGroupUserRese in DesktopConst.GroupUserSelectList) 
{
	var item = chatGroupUserRese.Adapt < GroupSelectMemberItemVo > ();
	item.Image = string.IsNullOrEmpty(chatGroupUserRese.UserAvatar) ? DesktopConst.GroupTransferDefaultUserAvatar : chatGroupUserRese.UserAvatar;
	item.Text = chatGroupUserRese.UserName;
	item.Id = (long) chatGroupUserRese.UserId!;
	item.OnSelectChangedAction += Vo.OnItemSelectChanged;
	userList.Add(item);
}
Vo.UserItems.AddRange(userList);
Vo.UserShowItems.AddRange(userList);
Vo.SelectTotal = Vo.SelectItems.Count;
Vo.SelectItemsChangeTrigger = Vo.SelectItems.Count;
Vo.UserShowItemsChangeTrigger = Vo.UserShowItems.Count;

Vo代码

public partial class GroupUserSelectWindowVo : ObservableObject 
{
	[ObservableProperty] private int _selectTotal;
	[ObservableProperty] private ObservableCollection<GroupSelectMemberItemVo> _userItems = new();
	[ObservableProperty] private ObservableCollection<GroupSelectMemberItemVo> _userShowItems = new();
	[ObservableProperty] private ObservableCollection<GroupSelectMemberItemVo> _selectItems = new();
	[ObservableProperty] private string _searchName;
	[ObservableProperty] private int _selectItemsChangeTrigger = 0;
	[ObservableProperty] private int _userShowItemsChangeTrigger = 0;
	// 回调函数:当任何一个子项的 Select 改变时调用
	public void OnItemSelectChanged(GroupSelectMemberItemVo item, bool isSelected) 
	{
		if (isSelected) 
		{
			if (!SelectItems.Contains(item))
			                SelectItems.Add(item);
		} else 
		{
			SelectItems.Remove(item);
		}
		// 更新选中总数
		SelectTotal = SelectItems.Count;
		UserShowItemsChangeTrigger = UserShowItems.Count;
		SelectItemsChangeTrigger = SelectItems.Count;
	}
	partial void OnSelectItemsChanged(ObservableCollection<GroupSelectMemberItemVo> value) 
	{
		SelectItemsChangeTrigger = SelectItems.Count;
	}
	partial void OnUserShowItemsChanged(ObservableCollection<GroupSelectMemberItemVo> value) 
	{
		UserShowItemsChangeTrigger = UserShowItems.Count;
	}
}

Vo代码

public partial class GroupSelectMemberItemVo : ObservableObject
{
    [ObservableProperty] private string _text;

    [ObservableProperty] private string _image;

    [ObservableProperty] private long _id;

    [ObservableProperty] private bool _select = false;
    
    public Action<GroupSelectMemberItemVo, bool>? OnSelectChangedAction { get; set; }

    partial void OnSelectChanged(bool value)
    {
        OnSelectChangedAction?.Invoke(this,value);
    }
}
posted @ 2025-09-30 13:52  Timskt  阅读(12)  评论(0)    收藏  举报