public class MainViewModel : ViewModelBase{ private readonly SourceList<TeamMember> _sourceList = new SourceList<TeamMember>(); [Reactive] public int OnlineCount { get; set; } [Reactive] public ReadOnlyObservableCollection<TeamMember> TeamMembers { get; private set; } public MainViewModel() { var pub = _sourceList.Connect().ObserveOn(RxApp.MainThreadScheduler).Publish().RefCount(); pub.Bind(out var teamMembers).Subscribe(); TeamMembers = teamMembers; pub.AutoRefreshOnObservable(x => x.WhenAnyValue(y => y.Online)) .Filter(x => x.Online) .Count() .Subscribe(x => OnlineCount = x); Observable.Interval(TimeSpan.FromSeconds(1)).Do(_ => { _sourceList.Edit(list => { foreach (var member in list) { member.Online = new Random().Next(0, 2) == 1; } }); }).Subscribe(); MakeData(); } private void MakeData() { AddMember("Alice", "Developer"); AddMember("Bob", "Designer"); AddMember("Charlie", "Manager"); AddMember("Diana", "Tester"); AddMember("Ethan", "DevOps"); AddMember("Fiona", "Product Owner"); } private void AddMember(string name, string role) => _sourceList.Add(new TeamMember { Name = name, Role = role, Online = false });}public class TeamMember : ReactiveObject{ [Reactive] public string Name { get; set; } = string.Empty; [Reactive] public string Role { get; set; } = string.Empty; [Reactive] public bool Online { get; set; }}