我需要将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
中列表值的访问方式?
答案 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;
}