Reactive ToProperty не устанавливает свойство

У меня есть свойство сеансы в моем вм

private ObservableAsPropertyHelper<IEnumerable<SessionViewModel>> _Sessions;
public IEnumerable<SessionViewModel> Sessions
{
    get { return _Sessions.Value; }
}

Я пытаюсь установить это в конструкторе так

this.WhenAny(x => x.LocationsViewModel.CurrentLocation, x => x.Date, (location, date) => location.Value)
        .Where(x => x != null)
        .Select(x => FilterSessions(x.Id, Date))
        .ToProperty(this, x => x.Sessions);

FilterSessions выглядит так

private IEnumerable<SessionViewModel> FilterSessions(Guid locationId, DateTime date)
{
     return _allSessions
        .Where(s => s.SessionLocationId == locationId && s.StartTime.Date == date.Date)
        .Select(s => new SessionViewModel(s));
}

Он возвращает 10 SessionViewModel, но _Sessions никогда не устанавливается.

2 ответа

Решение

Что это за платформа? Некоторые платформы не позволяют устанавливать приватные поля с помощью отражения. Вместо этого вы можете просто использовать возвращаемое значение ToProperty:

_Sessions = this.WhenAny(x => x.LocationsViewModel.CurrentLocation, x => x.Date, (location, date) => location.Value)
        .Where(x => x != null)
        .Select(x => FilterSessions(x.Id, Date))
        .ToProperty(this, x => x.Sessions);

Или лучше в RxUI 5.x:

this.WhenAny(x => x.LocationsViewModel.CurrentLocation, x => x.Date, (location, date) => location.Value)
        .Where(x => x != null)
        .Select(x => FilterSessions(x.Id, Date))
        .ToProperty(this, x => x.Sessions, out _Sessions);

Я работал над этим, установив свойство в методе подписки следующим образом:

this.WhenAny(x => x.LocationsViewModel.CurrentLocation, x => x.Date, (location, date) => location.Value)
        .Where(x => x != null)
        .Select(x => FilterSessions(x.Id, Date))
        .Subscribe(x => Sessions = x);
Другие вопросы по тегам