0

BoundItemUpdated イベントを使用する BoundItemUpdtedHandler を使用して Observable ストリームを作成しようとしています。

Base には 2 つのサブクラスがあり、グリッドのデータソースを設定しています。Base クラスでは、BoundItemUpdate が発生した場合にストリームを作成しようとしています。

public delegate void BoundItemUpdatedHandler<T>(T boundItem, IEnumerable<string> properties) where T : IBoundItem;

public class BindingList<T> : BindingList<T> where T : IBoundItem
{
 ..
 public event BoundItemUpdatedHandler<T> BoundItemUpdated;
}

public class Positions: Base
{
var datasource = new BindingList<PositionDTO>();
_grid.Datasource = datasource;
}

public class Orders: Base
{
var datasource = new BindingList<OrderDTO>();
_grid.DataSource = datasource
}

public class Base
{
  public IObservable<Stream> GetStream
  {
   //  How do I create stream using _grid? and event pattern?
  }
}
4

1 に答える 1

1

私はあなたが必要とするものを正確に理解していませんでした。このストリームのソースとなるものはどこから使用され、どのように発生させますか?

イベントを操作するには、理想は EventHandler 標準に従うことです:
http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx (Rx で使用する方が簡単です。 Rx は、サブスクリプションを作成するのが少し複雑です)

ただし、タイプを指定してイベントをサブスクライブする必要がある場合BoundItemUpdatedHandler<T>は、以下で実行できます (これは単なる例です)...

    [TestMethod]
    public void CustomEventWithRx()
    {
        var sx =
         Observable.FromEvent(
             new Func<Action<Tuple<IBoundItem, IEnumerable<string>>>, BoundItemUpdatedHandler<IBoundItem>>(
                 source => new BoundItemUpdatedHandler<IBoundItem>((s, e) => source(Tuple.Create(s, e)))),
             add => this.CustomHandler += add,
             rem => this.CustomHandler -= rem);

        sx.Select((item,index) => new { item,index}).Subscribe(next => Trace.WriteLine(next.index));

        OnCustomHandler(null, null);
    }

    public event BoundItemUpdatedHandler<IBoundItem> CustomHandler;

    protected virtual void OnCustomHandler(IBoundItem bounditem, IEnumerable<string> properties)
    {
        BoundItemUpdatedHandler<IBoundItem> handler = CustomHandler;
        if (handler != null) handler(bounditem, properties);
    }

    public delegate void BoundItemUpdatedHandler<T>(T boundItem, IEnumerable<string> properties) where T : IBoundItem;
于 2013-09-28T03:40:22.310 に答える