Tag: reactiveui

Rx Throttle(…)。ObserveOn(调度程序)和Throttle(…,调度程序)之间的区别

我有以下代码: IDisposable subscription = myObservable.Throttle(TimeSpan.FromMilliseconds(50), RxApp.MainThreadScheduler) .Subscribe(_ => UpdateUi()); 正如所料, UpdateUi()将始终在主线程上执行。 当我将代码更改为 IDisposable subscription = myObservable.Throttle(TimeSpan.FromMilliseconds(50)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(_ => UpdateUi()); UpdateUI()将在后台线程中执行。 为什么不是Throttle(…).ObserveOn(scheduler)等同于Throttle(…, scheduler) ?

我对失去活动的扩展计时器缺少什么?

我有这个: watchers .ToObservable() // needs to be observable .SelectMany(watcher => // working on each watcher Observable // create a timer for the watcher .Timer(watcher.StartTime, TimeSpan.FromHours(watcher.Interval)) .SelectMany(Observable.FromAsync( async () => new { watcher, result = await CheckFolder(watcher.Path) }))) .Subscribe(x => Console.WriteLine(string.Format(“Watcher: {0}\tResult: {1}\tTime: {2}”, x.watcher.Name, x.result, DateTimeOffset.Now))); // tell everyone what happened. 这篇文章中的一小段代码让我开始走这条路。 目标是在每次Timer发布时,根据给定的开始时间和间隔ping Web服务(通过CheckFolder()方法)。 麻烦的是,每次运行程序时,它都会为第一个Watcher输出一条消息,然后程序退出而不会出错。 […]

UICollectionView – 在一个视图上更新动画太多

更新:解决了! 请参阅下面的答案以获得解决方案。 我的应用程序在UICollectionView中显示了许多图像。 当新项目插入太快而集合视图无法处理时,我目前遇到insertItemsAtIndexPaths问题。 以下是例外情况: NSInternalInconsistencyException原因:在一个视图上更新动画太多 – 一次飞行限制为31 事实certificate这是由于我的模型缓冲了多达20个新图像并立即将它们推送到数据源但不在集合视图批量更新块中。 没有批量更新不是由于我的懒惰造成的,而是因为我的数据源之间的抽象层实际上是一个.Net Observable集合(下面的代码)。 我想知道的是开发人员如何防止在飞行中达到31个动画的硬编码限制? 我的意思是当它发生时,你是敬酒。 那么Apple的想法是什么? Monotouch开发人员阅读代码的注意事项: 崩溃实际上是由UICollectionViewDataSourceFlatReadOnly压倒UIDataBoundCollectionView并使用CollectionChanged事件引起的,它代表底层的observable集合代理控件。 这导致collectionview受到非批量InsertItems调用的打击。 (是保罗,它是一个ReactiveCollection)。 UIDataBoundCollectionView /// /// UITableView subclass that supports automatic updating in response /// to DataSource changes if the DataSource supports INotifiyCollectionChanged /// [Register(“UIDataBoundCollectionView”)] public class UIDataBoundCollectionView : UICollectionView, IEnableLogger { public override NSObject WeakDataSource { get { return […]

如何在PRISM模块中使用ReactiveUI

我们有一个现有的WPF应用程序,它使用PRISM(6.x)和Unity(3.5.x)进行DI。 我们将为此应用程序添加更多function,并希望开始将ReactiveUI用于我们需要实现的任何新模块。 我们希望尽量减少学习曲线并继续为ViewModels使用Unity和DI; 但是,ReactiveUI使用Splat for View位置,到目前为止,我无法让我的ReactiveUI模块实际显示在我们的主应用程序中的PRISM区域,无论我尝试过什么。 我真正找到的唯一一篇文章就是这篇文章在ReactiveUI中的IMutableDependencyResolver和Structuremap问题,其中有人正在编写自己的集成。 所以给出了一些ViewModel: public class HelloWorldViewModel : ReactiveObject { string title = “Hello ReactiveUI”; public string Title { get { return title; } set { this.RaiseAndSetIfChanged(ref title, value); } } } 及其相应的观点: 以及实现IViewFor接口背后的视图代码: public partial class HelloWorldView : UserControl, IViewFor { public HelloWorldView() { InitializeComponent(); this.WhenAnyValue(x => x.ViewModel).BindTo(this, x => […]

ReactiveUI – 查看定位器性能

在我使用ReactiveUI WPF应用程序中,我注意到一个性能不佳的领域。 我有一个视图模型,其中包含许多其他轻量级视图模型(想想30ish)。 这些嵌套的视图模型很简单,通常每个都代表一个按钮。 它们都显示在用户控件中,在使用ReactiveUI的OneWayBind连接的ItemsControl中。 这意味着使用ViewModelViewHost显示每个项目。 所以,问题 在我强大的桌面PC上,当我导航到这个视图模型时,按下“video模型”按钮和视图变化之间存在明显的延迟,大约0.5秒。 当我在Power-PC上运行相同的软件时,延迟将近4秒。 从UX的角度来看,这是一个非常大的问题。 我学到了什么 我试了很长时间的分析和调试我的代码,发现没有问题的区域。 Zilch(注意: 在VS中使用JustMyCode,因此ReactiveUI没有显示 )。 但是,我确实找到了解决问题的方法。 我没有使用OneWayBind绑定到ItemsControl.ItemSource , OneWayBind在XAML中这样做: ItemSource={Binding MyViewModels}并手动设置DataTemplate 。 这导致更快的转换。 使用ItemsControl与OneWayBind绑定时,将自动为您创建ViewModelViewHost ,并使用ViewLocator查找视图模型的视图。 我认为由于某种原因这很慢。 题 是否有人知道如何在不必手动为ItemsControl定义大量数据模板的情况下解决这个性能问题? 如果我有视图模型的视图模型的视图模型,那么事情会很快变得丑陋。 根据我过去使用Caliburn.Micro经验,视图位置约定很快,所以我也想知道我是不是正确地使用了ReactiveUI ,并且有一种更快的替代方法。 谢谢。 TLDR; ViewModelViewHost作为DataTemplate个视图模型的DataTemplate导致视图在最初加载时非常缓慢,使UI看起来好像已经崩溃了。 有什么方法可以避免这种情况吗?

ReactiveUI(RxUI)与Reactive Extensions

来自http://docs.reactiveui.net/en/index.html : ReactiveUI是一个MVVM框架,允许您使用Reactive Extensions for .NET创建在任何移动或桌面平台上运行的优雅,可测试的用户界面。 RxUI与Reactive Extensions有什么不同? 为什么我更喜欢RxUI而不是MVVMCross / light + Rx? 有什么特别的? RxUI可以做一些Rx不能做的事情吗? 它更简洁吗? 它更舒适吗? 我在github页面https://github.com/reactiveui/ReactiveUI#a-compelling-example上看到了一些例子。 但我不能只用Rx做同样的事情吗? PS那里有API doc吗?

使用比原始元素更多的元素创建ReactiveUI派生集合

是否可以创建一个ReactiveUI派生集合,其中包含的元素多于原始集合? 我已经看到有一种过滤集合和选择单个属性的方法,但我正在寻找的是相当于枚举的SelectMany操作。 为了说明这一点,想象一下,试图得到一个派生的集合来代表每个遇到堵车的乘客。 class Car { ReactiveCollection Passengers; } var TrafficJam=new ReactiveCollection(); EveryPassengerInTheTrafficJam=Cars.CreateDerivedCollection(c=>c.Passengers); 以上不起作用,我认为错误是IEnumerable<ReactiveCollection>无法强制转换为ReactiveCollection – 或者任何类型的东西,无论如何。 我无法弄清楚这种扁平化的正确方法 – 诚然,我可能在这里完全错误地吠叫,所以如果有更好的方法来实现同样的事情,请告诉我!

ReactiveUI和Caliburn Micro在一起?

我一直在使用Caliburn Micro作为我们的MVVM框架在新的Silverlight应用程序上做一些原型工作。 团队一直很满意。 为了解决对服务的限制请求的一些问题,建议我查看ReactiveUI的ReactiveCollections及其INotifyPropertyChanged的实现。 有没有人有任何使用这两者的经验? 由于它们都是主要的MVVM框架,因此存在很多重叠,因此我想知道它是否可能比尝试使它们协同工作更麻烦。 我们真正喜欢Caliburn Micro的一些事情是: 基于公约的约束等……我们认为非常好。 引导。 我们喜欢它的处理方式,在您需要时可以轻松扩展,但开箱即用的东西适用于我们的许多用例。 构图/屏幕管理。 我们非常喜欢Rob的导体,屏幕等概念。它非常适合我们。 ReactiveUI的东西吸引了我们(至少最初)。 Reactive Collections和INotifyPropertyChanged的东西。 特别是节流反应的能力。 Reactive的异步内容似乎比Rob的Co-routine实现更清晰。 我几乎没有机会玩ReactiveUI,但是当我看着它并看到两者之间的重叠时,我想知道谁可能试图将两者都用于一个项目。 我无法通过谷歌找到任何东西(这可能是我的错)。 我很想知道你是否尝试过这个; 你有什么问题? 您使用了每个框架的哪些部分?为什么? 有没有关于将它们一起使用的好例子或博客文章? 干杯, 史蒂夫

ReactiveUI 5.0.2中缺少ReactiveAsyncCommand

我刚从https://github.com/reactiveui/ReactiveUI.Samples/blob/master/ReactiveUI_4Only.Samples.sln开始学习ReactiveUI。 我通过nuget下载最新版本但我无法在ReactiveUI.Xaml中找到类ReactiveAsyncCommand。

缓存数据库游标中的数据,同时保持UI响应

我有一个填充的数据库目录,以及一个可用于检索对象的游标。 这个目录显然可能非常大,我想做的是使用ReactiveUI缓冲数据,同时保持UI数据绑定和响应。 我按照这里的步骤将我的IEnumerable转换为IObservable ,如下所示: public class CatalogService { … public IObservable DataSource { get { return Observable.Create(obs => { var cursor = Database.Instance.GetAllObjects(); var status = cursor.MoveToFirst(); while (status == DbStatus.OK) { var dbObject= Db.Create(cursor); obs.OnNext(dbObject); status = cursor.MoveToNext(); } obs.OnCompleted(); return Disposable.Empty; }); } } } 在我的视图类(特别是Loaded事件)中,我订阅数据源并使用缓冲区方法,希望保持UI响应。 public ObservableCollection DbObjects { get; set; } […]