我正在尝试使用BoundItemUpdtedHandler创建Observable流,这是使用BoundItemUpdated事件。
有两个Base的子类正在为网格设置数据源,而在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?
}
}
答案 0 :(得分: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;