C# 使订户侦听所有观察者更改
我刚开始在现有的Xamarin.iOS项目中使用ReactiveX。我想将我以前的searchcontroller/uitableview解决方案调整为使用reactivex进行实践的解决方案 以下是我目前的做法:C# 使订户侦听所有观察者更改,c#,.net,xamarin.ios,system.reactive,C#,.net,Xamarin.ios,System.reactive,我刚开始在现有的Xamarin.iOS项目中使用ReactiveX。我想将我以前的searchcontroller/uitableview解决方案调整为使用reactivex进行实践的解决方案 以下是我目前的做法: var dataStream = Observable .FromEventPattern<UISearchBarTextChangedEventArgs>( ev => searchController.Search
var dataStream =
Observable
.FromEventPattern<UISearchBarTextChangedEventArgs>(
ev => searchController.SearchBar.TextChanged += ev,
ev => searchController.SearchBar.TextChanged -= ev)
.Select(o => o.EventArgs.SearchText)
.DistinctUntilChanged()
.ObserveOn(SynchronizationContext.Current)
.Synchronize()
.Select(t =>
{
var lookup = new Lookup(prefix: t);
smartyStreetsClient.Send(lookup);
var data = new List<Suggestion>(lookup.Result);
return data.ToObservable().ObserveOn(SynchronizationContext.Current);
})
.Switch();
dataStream.Subscribe(o =>
{
suggestions.Add(o);
TableView.Source = new ATableSource(suggestions);
TableView.ReloadData();
});
var数据流=
可观察
.FromEventPattern(
ev=>searchController.SearchBar.TextChanged+=ev,
ev=>searchController.SearchBar.TextChanged-=ev)
.Select(o=>o.EventArgs.SearchText)
.DistinctUntilChanged()
.ObserveOn(SynchronizationContext.Current)
.Synchronize()
.选择(t=>
{
var lookup=新查找(前缀:t);
SmartyStreetClient.Send(查找);
var数据=新列表(lookup.Result);
返回data.ToObservable().ObserveOn(SynchronizationContext.Current);
})
.开关();
dataStream.Subscribe(o=>
{
建议.加入(o);
TableView.Source=新的ATableSource(建议);
TableView.ReloadData();
});
虽然这在一开始起作用,但订阅者除了第一个之外,没有监听到我的observable的任何其他更改(observable正在成功地运行每一个文本更改)。谢谢你的帮助。你能试试这个吗
var dataStream =
Observable
.FromEventPattern<UISearchBarTextChangedEventArgs>(
ev => searchController.SearchBar.TextChanged += ev,
ev => searchController.SearchBar.TextChanged -= ev)
.Select(o => o.EventArgs.SearchText)
.DistinctUntilChanged()
.SelectMany(t => Observable.Start(() =>
{
var lookup = new Lookup(prefix: t);
smartyStreetsClient.Send(lookup);
var data = new List<Suggestion>(lookup.Result);
return data;
}))
.ObserveOn(SynchronizationContext.Current);
var数据流=
可观察
.FromEventPattern(
ev=>searchController.SearchBar.TextChanged+=ev,
ev=>searchController.SearchBar.TextChanged-=ev)
.Select(o=>o.EventArgs.SearchText)
.DistinctUntilChanged()
.SelectMany(t=>Observable.Start(()=>
{
var lookup=新查找(前缀:t);
SmartyStreetClient.Send(查找);
var数据=新列表(lookup.Result);
返回数据;
}))
.ObserveOn(SynchronizationContext.Current);
我无法测试您的代码,因此可能需要一些修改。搜索一下James World。S.O.上的间谍自定义操作员。它将帮助您。