有没有办法监听Reactive Extensions中没有引发的事件? - c#

我需要在用户开始键入时关闭某些功能,这很简单。当用户停止键入时,我想重新打开该功能。

如果没有反应性扩展,则可以使用timer简单地实现此功能,该功能可将每次最后一次击键时的计时器重置为1 second,并在user stops typing and timer elapses功能打开时将其重置。

有什么方法可以调用以实现与Reactive Extensions相同的效果吗?

ThrottleTimeout每次1 second不断调用订户/异常操作

更新

XAML

<RichTextBox MaxHeight="1000" VerticalScrollBarVisibility="Visible" x:Name="meh"/>

扩展类

public static IObservable<EventArgs> ObserveTextChanged(this RichTextBox rtb)
{
 return Observable.FromEventPattern<TextChangedEventHandler, EventArgs>(
            h => rtb.TextChanged += h,
            h => rtb.TextChanged -= h)
                         .Select(ep => ep.EventArgs);
}

mehRichTextBox的类

public class MainWindow()
{
 //Change this to be the keypress/propertychagned event. The type T doesn't matter we ignore it
 var typing = meh.ObserveTextChanged().Take(4);
 var silence = meh.ObserveTextChanged().IgnoreElements();
 var source = typing.Concat(silence).Concat(typing);
 var disableSpellcheck = source.Select(_ => false);
 var enableSpellcheck = source.Select(_ => Observable.Timer(TimeSpan.FromSeconds(1)))
                                     .Switch()
                                     .Select(_ => true);

 disableSpellcheck.Merge(enableSpellcheck)
                  .DistinctUntilChanged()
                  .Subscribe(SetFlag);

 }

// Define other methods and classes here
public void SetFlag(bool flag)
{
 Dispatcher.Invoke(new Action(() => SpellCheck.SetIsEnabled(meh, flag)));
 Debug.Write("flag");
}

参考方案

这是所有代码,展示了如何将上述代码移植到WPF。看来这里的沟通存在差距,所以我创建了整个wpf应用来证明这一点。

<Window x:Class="StackoverFlow_23764884.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <HeaderedContentControl Header="When checked, spellcheck is enabled (emulated)">
            <CheckBox x:Name="spellChecking" IsChecked="True" IsEnabled="False"/>
        </HeaderedContentControl>

        <HeaderedContentControl Header="Type here to see the Spellcheck enable and disable">
            <RichTextBox x:Name="meh" Width="400" Height="300" />
        </HeaderedContentControl>
    </StackPanel>
</Window>

以及后面的代码:

using System;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Controls;

namespace StackoverFlow_23764884
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var source = meh.ObserveTextChanged();
            var disableSpellcheck = source.Select(_ => false);
            var enableSpellcheck = source.Select(_ => Observable.Timer(TimeSpan.FromSeconds(1)))
                                         .Switch()
                                         .Select(_ => true);

            disableSpellcheck.Merge(enableSpellcheck)
                             .DistinctUntilChanged()
                             .ObserveOnDispatcher()
                             .Subscribe(isEnabled => spellChecking.IsChecked=isEnabled);
        }

    }

    public static class ObEx
    {
        public static IObservable<EventArgs> ObserveTextChanged(this RichTextBox rtb)
        {
            return Observable.FromEventPattern<TextChangedEventHandler, EventArgs>(
                h => rtb.TextChanged += h,
                h => rtb.TextChanged -= h)
                .Select(ep => ep.EventArgs);
        }
    }
}

我拉入Rx-WPF nuget packeage将拉出代码所需的所有其他内容。这是.NET 4.5。

这是显示如何解决问题的示例。即我不建议使用.ObserveOnDispatcher(),不建议编写代码隐藏的代码,并且我知道在复选框上设置IsEnabled实际上并没有进行拼写检查。我希望这足以使听众重新创建他们的实际解决方案。

我确实希望能有所帮助。

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

使用javascript在客户端的列表视图中选择所有复选框 - javascript

我有一个列表视图,在标题中有一个复选框。如果标题复选框已选中/未选中,我想选择行中的所有复选框。如何在客户端实现此目标?这是ListView设计代码。<asp:ListView ID="lvTypes" runat="server" GroupPlaceholderID="groupPlaceHolde…

Ajax表单未获得结果 - javascript

我有一个带有搜索功能的主页。从主页搜索可以正常工作,但是当我尝试使用ajax表单(在url.com/search?id=biology上)再次搜索时,我被重定向到404页面,提示未找到/Search。主页上的表格:@using (Html.BeginForm("Index", "Search", new { Retur…

使用数组填充动态下拉列表 - php

我正在尝试使用多维数组在PHP中进行动态下拉列表。我的第一个选择框正确填充,但是在选择建筑物时,我需要第二个选择框来显示用于第一个选择的相应显示(大厅,休息室等)这是数组:$displays = array( "Company" => array( "Building 1"=>array( "Di…

调整窗口大小时如何调整YouTube播放器的大小 - php

我想显示包含YouTube视频的弹出窗口。我的问题是当用户调整弹出窗口的大小时如何调整YouTube播放器的大小?弹出窗口的头部分PHP / HTML代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/…