如何将IChangeSet <int>转换为List <int>?

时间:2019-09-04 14:41:42

标签: c# wpf reactive-programming

我需要将IObservable<int>转换为IObservable<bool>。为此,我需要输入observableSelectedQuantity的最后两个值。

    IObservable<int> observableSelectedQuantity;
    public Constructor()
    {
        observableSelectedQuantity = Item.WhenAnyValue(x => x.SelectedQuantity);
        observableSelectedQuantity.ToObservableChangeSet().Select(ConvertToBool).Subscribe();
    }

    private bool ConvertToBool(IChangeSet<int> arg)
    {
        //Inside logic
    }

我认为我可以从某种列表中获得最后两个元素。因此,我将IObservable<int>转换为IChangeSet<int>,然后在ConvertToBool中编写了这段代码:

var a = arg.ToList();

我希望每次将新元素添加到observableSelectedQuantity时,ToList都会生成包含先前元素和最后一个元素的新列表。但是每次添加新元素时,ToList()都会生成仅包含observableSelectedQuantity的最后一个元素的列表。使用IChangeSet是否可以解决我的问题?还是我需要更改获取observableSelectedQuantity中列表值的访问方式?

1 个答案:

答案 0 :(得分:1)

  

我希望每次将新元素添加到observableSelectedQuantity时,ToList都会生成包含先前元素和最后一个元素的新列表。

不,不是,但是您不需要IChangeSet<int>来跟踪IObservable<int>中的最后两个值。您可以将先前的值存储在变量中,例如:

IObservable<int> observableSelectedQuantity = this.WhenAnyValue(x => x.SelectedQuantity);
IObservable<bool> observableOfBools = observableSelectedQuantity.Select(i => ConvertToBool(i));
...
int? previousValue = null;
private bool ConvertToBool(int currentValue)
{
    bool returnValue = ...; //logic

    previousValue = currentValue;
    return returnValue;
}