Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 在单个按钮上协调多个IObservable_C#_System.reactive - Fatal编程技术网

C# 在单个按钮上协调多个IObservable

C# 在单个按钮上协调多个IObservable,c#,system.reactive,C#,System.reactive,我有一个在播放/暂停之间交替的按钮。我想看看使用被动扩展是否有一个好的解决方案,而不是切换布尔值。这是我的想法的粗略估计 var whenPlayClicked = Observable.FromEventPattern<EventArgs>(_playPauseButton, "Click") .Take(1) .Skip(1) .Repeat(); var whenPauseclicked = Observable.FromEventPattern<

我有一个在播放/暂停之间交替的按钮。我想看看使用被动扩展是否有一个好的解决方案,而不是切换布尔值。这是我的想法的粗略估计

var whenPlayClicked = Observable.FromEventPattern<EventArgs>(_playPauseButton, "Click")
    .Take(1)
    .Skip(1)
    .Repeat();

var whenPauseclicked = Observable.FromEventPattern<EventArgs>(_playPauseButton, "Click")
    .Skip(1)
    .Take(1)
    .Repeat();
var whenPlayClicked=Observable.FromEventPattern(\u playbauseButton,“Click”)
.采取(1)
.Skip(1)
.重复();
var whenPauseclicked=可观察。FromEventPattern(_playPauseButton,“单击”)
.Skip(1)
.采取(1)
.重复();

Rx不提供任何本机运算符来简单地切换布尔值;但是,您可以编写一个非常优雅的
Scan
查询来避免闭包

void UserControl_Loaded(object sender, RoutedEventArgs e)
{
  Observable.FromEventPattern(_playPauseButton, "Click")
            .Scan(false, (play, _) => !play)
            .Subscribe(play => { if (play) Play(); else Pause(); });
}

private void Play()
{
  _playPauseButton.Content = "Pause";
}

private void Pause()
{
  _playPauseButton.Content = "Play";
}

谢谢你的回答。我以前从未见过
Scan
扩展方法。我喜欢这个选项不需要额外的类变量。