我的视图模型中有一些代码如下:
miService.GetSomething(par1, par2)
.ObserveOnDispatcher()
.Subscribe(dt =>
{
DoSomething(dt);
});
Run Code Online (Sandbox Code Playgroud)
然后在我的测试中,我"嘲笑"我的服务如下:
miService.Setup(ms => ms.GetSomething(....))
.Returns(Observable.Return(XYZ));
Run Code Online (Sandbox Code Playgroud)
问题是由于ObserveOnDispatcher,订阅委托永远不会被执行.
我见过DispatcherFrame和PushFrame的一些代码,但问题是我不知道"哪里",我可以打电话
frame.Continue = false;
Run Code Online (Sandbox Code Playgroud) 我刚读Rx HOL NET.找到后(示例使用Windows窗体):
var moves = Observable.FromEvent<MouseEventArgs>(frm, "MouseMove");
Run Code Online (Sandbox Code Playgroud)
我想知道如何在一些WPF MVVM设置中实例化并传递对ViewModel的引用?根据我的理解,尝试在ViewModel中过滤此数据流是有意义的.
或者,如何为键盘输入TextBox做类似的事情?例如,在这种情况下,您不会将某些文本屏蔽行为附加到XAML中的控件,而是让VM中的Observer过滤并验证键盘输入.
我完全不在赛道上吗?
Reactive Extensions(Rx)是什么意思.它如何帮助我在windows phone芒果中开发应用程序?是q框架还是帮助库?这个(Rx)在WP中的有效应用程序开发中的作用是什么.芒果.任何人都可以建议我学习技术的一些链接,
我知道如何创建一个observable并分配一个处理动作:
Observable.Create(o =>
{
// o.OnNext etc.
return Disposable.Create(() => { /* ... */ });
});
Run Code Online (Sandbox Code Playgroud)
但是现在我从查询语法中产生了一个observable:
var observable = from x in otherObservable
select x;
Run Code Online (Sandbox Code Playgroud)
如何为此类查询分配处理操作?
使用Microsoft Reavtive Extensions(RX),我想知道它是否有可能在事件发生之前被阻止?
像这样的东西:
observableStream.BlockUntilTrue(o => o.MyProperty == true);
Run Code Online (Sandbox Code Playgroud)
我尝试过的
我已经尝试过observableStream.TakeUntil(o => o.MyProperty == true);,但这会立即退出。
我们可以在C#Rx中异步执行一些代码,如下所示,使用Observable.Start().我想知道RxJava中的等价物是什么.
void Main()
{
AddTwoNumbersAsync (5,4)
.Subscribe(x=>Console.WriteLine(x));
}
IObservable<int> AddTwoNumbersAsync(int a, int b)
{
return Observable.Start(() => AddTwoNumbers(a, b));
}
int AddTwoNumbers(int a, int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud) 不难找到如何制作自定义LINQ扩展方法的示例.但我找不到如何制作自定义Rx扩展方法的示例.
有人能指出我的资源或发布一个例子吗?我正在使用最新的(版本2.2.5).
我有兴趣制作自定义"演员"或自定义"选择".我可以反映现有扩展的源代码,但仍然不明显.
谢谢.
我试图将我的头围绕在最近从6.5.2更新到7.0的reactiveUI上,并且似乎包含了一些关于ReactiveCommand的重大变化.
EG以前的工作:
在ViewModel中:
public ReactiveCommand<Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateAsyncTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});
Run Code Online (Sandbox Code Playgroud)
在视图中:
//bind the command
Observable.FromEventPattern(x => loginButton.Clicked += x, x => loginButton.Clicked -= x)
.Subscribe(args => ViewModel.DoLogin.Execute(null));
//do something after the dologin is complete
this.WhenAnyObservable(x => x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe( x => {
DisplayAlert("login complete", "welcome", "OK");
}
);
Run Code Online (Sandbox Code Playgroud)
但现在在activui 7.0,它是不同的,我不得不做一些改变,我无法让它正常工作:
在ViewModel中:
public ReactiveCommand<Unit, Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateFromTask(
async x => {
IsBusy = …Run Code Online (Sandbox Code Playgroud) 目前我正在使用此代码来获取文件:
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += webClient_DownloadProgressChanged;
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(webClient_ProgressCompleted);
Run Code Online (Sandbox Code Playgroud)
我一直在查看文档,以便弄清楚如何使用Rx转换此代码.
我开始创建一个Observable使用FromEvent以观察DownloadFileCompleted事件.
Observable.FromEvent<?>(?, ?)
Run Code Online (Sandbox Code Playgroud)
然而,我无法想象如何填补这些?.
有人能举个例子吗?
到目前为止,我已尝试过:
Observable.FromEvent<AsyncCompletedEventArgs>(?1:addHandler, ?2:removeHandler).
Run Code Online (Sandbox Code Playgroud)
然而,.NET是请求我,?1:addHandler和?2:removeHandler是Action<Action<AsyncCompletedEventArgs>>(那是什么)?
我有以下类的项目集合:
public class Event
{
public DateTimeOffset Timestamp;
public object Data;
}
Run Code Online (Sandbox Code Playgroud)
我想创建IObservable<Event>在Timestamp将来发布每个项目的位置.这是可能的,Observable.Delay还是我必须编写自己的IObservable<T>实现?
我会提到这个结构就像一个日志文件.可以有成千上万的Event项目,但每秒只能发布1-2项.
system.reactive ×10
c# ×8
.net ×3
observable ×2
dispatcher ×1
mvvm ×1
reactiveui ×1
rx-java ×1
unit-testing ×1
wpf ×1