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);
}
}

浙公网安备 33010602011771号