Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使订户侦听所有观察者更改_C#_.net_Xamarin.ios_System.reactive - Fatal编程技术网

C# 使订户侦听所有观察者更改

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

我刚开始在现有的Xamarin.iOS项目中使用ReactiveX。我想将我以前的searchcontroller/uitableview解决方案调整为使用reactivex进行实践的解决方案

以下是我目前的做法:

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.上的间谍自定义操作员。它将帮助您。