Reactive ToProperty未设置属性

时间:2013-06-29 14:19:25

标签: viewmodel observable reactiveui

我的vm中有属性Sessions

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 个答案:

答案 0 :(得分:4)

这是什么平台?某些平台不允许通过反射设置私有字段。相反,您可以使用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);

答案 1 :(得分:1)

我通过在subscribe方法中设置属性来解决这个问题,如下所示:

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