标签: reactiveui

ReactiveUI生产准备好了吗?

我一直在研究在生产代码中使用Reactive UI的可行性.一些功能真的很吸引人,但我担心依赖这个库.这些包括:

  1. Whacky命名和约定.例如,受保护的成员以小写字母开头,该RaiseAndSetIfChanged方法取决于以下划线开头的私有成员.我理解Paul Betts(ReactiveUI作者)有Ruby背景,所以我想这就是奇怪的命名源于此.但是,这会给我带来真正的问题,因为标准命名(根据Stylecop)在整个项目中都是强制执行的.即使没有强制执行,我也会担心这会导致命名的不一致.
  2. 缺乏文件/样本.有一些文档和一个孤独的样本.但是,文档只是一系列(旧的)博客文章,示例基于库的V2(现在在V4上).
  3. 奇怪的设计,部分.例如,日志记录是抽象的,以便不依赖于特定的日志记录框架.很公平.但是,由于我使用log4net(而不是NLog),我需要自己的适配器.我认为这将需要我实现IRxUIFullLogger,其中包含一个公制的方法(超过50).我认为一个更好的方法是定义一个非常简单的接口,然后在ReactiveUI中提供扩展方法,以促进所有必需的重载.另外,IWantsToRegisterStuffNLog程序集所依赖的这个奇怪的接口,我将无法依赖它(因为它是一个内部接口).我希望我不需要......

    无论如何,我关心的是图书馆的整体设计.有没有人被这个咬过?

  4. 我已经广泛使用MVVM Light了.我知道保罗写了一篇博文,他解释说你可以在技术上同时使用两者,但我更关心的是可维护性.我怀疑两者混合在一个代码库中会非常令人困惑.

有没有人有在生产中使用Reactive UI的实践经验?如果是这样,您是否能够减轻或解决我上述任何疑虑?

wpf mvvm reactiveui

39
推荐指数
3
解决办法
8296
查看次数

ReactiveUI和Caliburn Micro在一起?

我一直在使用Caliburn Micro作为我们的MVVM框架在新的Silverlight应用程序上做一些原型工作.团队一直很满意.为了解决对服务的限制请求的一些问题,建议我查看ReactiveUI的ReactiveCollections及其INotifyPropertyChanged的实现.

有没有人有任何使用这两者的经验?因为它们都是主要的MVVM框架,所以有很多重叠,所以我想知道它是否可能比尝试使它们一起工作更麻烦.

我们真正喜欢Caliburn Micro的一些事情是:

  • 基于公约的约束等......我们认为非常好.
  • 引导.我们喜欢它的处理方式,它很容易在需要时扩展,但开箱即用的东西适用于我们的许多用例.
  • 构图/屏幕管理.我们非常喜欢Rob的导体,屏幕等概念.它非常适合我们.

ReactiveUI的东西吸引了我们(至少最初).

  • Reactive Collections和INotifyPropertyChanged的东西.特别是节流反应的能力.
  • Reactive的异步内容似乎比Rob的Co-routine实现更清晰.

我几乎没有机会玩ReactiveUI,但是当我看着它并看到两者之间的重叠时,我想知道谁可能试图将两者都用于一个项目.我无法通过谷歌找到任何东西(这可能是我的错).

我很想知道你是否尝试过这个; 你有什么问题?您使用了每个框架的哪些部分?为什么?是否有任何好的例子或博客文章一起使用它们?

干杯,

史蒂夫

c# silverlight caliburn.micro reactiveui

28
推荐指数
1
解决办法
6080
查看次数

Reactive UI中各种WhenAny方法之间的区别是什么

Reactive UI中有几种扩展方法,用于获取属性更改的可观察对象.

我想我明白WhenAnyWhenAnyValue. WhenAny用于一系列属性更改通知,其中您希望哪个对象和属性的元数据发生了更改,而WhenAnyValue当您真正想要更改值的流时.

首先,这是一个准确的评估吗?

怎么样WhenAnyDynamic,WhenAnyObservableObservableForProperty?我无法弄清楚它们的用途,或者它们与前两个有何不同.它们都是供公众使用的吗?他们的目的是什么?

.net reactiveui

25
推荐指数
1
解决办法
5345
查看次数

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吗?

c# system.reactive reactiveui

16
推荐指数
1
解决办法
5491
查看次数

ReactiveUI与MvvmCross

标题说明了一切.根据您的经验,两个框架之间的关键区别是什么?当我们应该使用一个而不是另一个?

预期用途:跨平台开发(Windows 8,iOS,Android,WindowsRT,Mac).

reactiveui mvvmcross

15
推荐指数
3
解决办法
4217
查看次数

如何在Flutter中使用Bloc模式进行错误处理?

想象一下我正在使用集团来处理网络请求。如果请求失败,则根据平台的不同,处理失败的方法也会有所不同。在我的Web应用程序上,我想将用户重定向到错误页面,而在IOS应用程序上,我想显示一个对话框。

由于仅应使用bloc并共享它来处理业务逻辑,并且错误处理部分与业务逻辑无关,因此,我们应该请UI部分照顾错误处理。

UI可以将错误回调发送到块,并且当发生错误时,块将运行它。我们还可以通过在不同平台上发送不同的回调,以特定于平台的方式处理错误。

接下来是我的两个问题:

有没有更合适的方法可以做到这一点?

如何将回调发送到集团?

在flutter中,我们只能在initState生命周期方法之后访问bloc (因为我们是从builder上下文中获取bloc的,而后者仅在之后initState)。然后,我们只能在build方法中发送回调。

这样,每次重建时,我们都会重复向回调发送bloc(这些重复没有意义)。使用react,可以在生命周期(例如)中完成一次一次性初始化componentDidMount。在颤振中,我们如何达到只运行一次初始化的目标?

error-handling reactive-programming reactiveui flutter

15
推荐指数
1
解决办法
1727
查看次数

在C#中禁止"永远不会将成员分配给"警告

我有以下代码:

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(value); }
}
Run Code Online (Sandbox Code Playgroud)

使用ReactiveUI INPC支持.编译器始终警告我Trochoid永远不会分配给它,并且始终为null.然而,由于RaiseAndSetIfChanged通过CallerMemberName支持执行的魔术,代码确实有效并且编译器是错误的.

如何在我的代码中干净地压制这些警告?

c# inotifypropertychanged suppress-warnings reactiveui callermembername

14
推荐指数
2
解决办法
1590
查看次数

ReactiveUI异常处理

我查看了一些ReactiveUI示例,但是我看不到一个如何处理异常的简单示例,其中应该向用户显示消息.(如果有一个很好的例子可以有人指出我吗?).

我的第一个问题是如何使用ReactiveCommand和ToProperty处理异常.例如,我有以下代码:

public class MainWindowViewModel : ReactiveObject
{
    public ReactiveCommand CalculateTheAnswer { get; set; }

    public MainWindowViewModel()
    {
        CalculateTheAnswer = new ReactiveCommand();

        CalculateTheAnswer
            .SelectMany(_ => AnswerCalculator())
            .ToProperty(this, x => x.TheAnswer);

        CalculateTheAnswer.ThrownExceptions
            .Select(exception => MessageBox.Show(exception.Message));
    }

    private readonly ObservableAsPropertyHelper<int> _theAnswer;
    public int TheAnswer
    {
        get { return _theAnswer.Value; }
    }

    private static IObservable<int> AnswerCalculator()
    {
        var task = Task.Factory.StartNew(() =>
        {
            throw new ApplicationException("Unable to calculate answer, because I don't know what the question is");
            return 42;
        });

        return task.ToObservable();
    } …
Run Code Online (Sandbox Code Playgroud)

c# reactiveui

13
推荐指数
1
解决办法
3774
查看次数

无法加载文件或程序集'system.core version = 2.0.5.0

我试图在使用Prism 的WPF应用程序中使用ReactiveUI.我使用NuGet安装了软件包,但只是添加了引用,导致在ModuleCatalog初始化期间标题中指定的异常.

编辑:

正如Pierre Arnaud指出的那样,问题是Microsoft.Bcl.Async无法解析System.Core版本2.0.5.0.

自从我第一次发布这个问题以来,我们搬到了Visual Studio 2012.同样的问题仍然存在,我甚至无法安装皮埃尔建议的修复程序,因为我现在安装了.Net 4.5.该项目仍然以.Net 4.0为目标.

reactiveui

13
推荐指数
2
解决办法
6915
查看次数

异步方法在ReactiveUI中使用TestScheduler进行死锁

我正在尝试在测试中使用带有异步方法的reactiveui测试调度程序.

等待异步调用时,测试挂起.

根本原因似乎是异步方法中等待的命令.

    [Fact]
    public async Task Test()
        => await new TestScheduler().With(async scheduler =>
        {
            await SomeAsyncMethod();

            // *** execution never gets here
            Debugger.Break();
        });

    private async Task SomeAsyncMethod()
    {
        var command = ReactiveCommand.CreateFromTask(async () =>
        {
            await Task.Delay(100);
        });

        // *** this hangs
        await command.Execute();
    }
Run Code Online (Sandbox Code Playgroud)

如何与没有死锁的测试调度程序一起执行异步调用?

我正在使用reactiveui 9.4.1

编辑:

我已经尝试了WithAsync()Funks答案中建议的方法,但行为是一样的.

c# reactiveui

12
推荐指数
1
解决办法
383
查看次数