// -----------------------------------------------------------------------
//
// Copyright 2015 MIT Licence. See licence.md for more information.
//
// -----------------------------------------------------------------------
namespace Perspex
{
using System;
using System.Reactive.Linq;
///
/// Provides extension methods for and related classes.
///
public static class PerspexObjectExtensions
{
///
/// Subscribes to a property changed notifications for changes that originate from a
/// .
///
/// The type of the property change sender.
/// The property changed observable.
/// Given a TTarget, returns the handler.
/// A disposable that can be used to terminate the subscription.
public static IDisposable AddClassHandler(
this IObservable observable,
Func> handler)
where TTarget : class
{
return observable.Subscribe(e => SubscribeAdapter(e, handler));
}
///
/// Observer method for .
///
/// The sender type to accept.
/// The event args.
/// Given a TTarget, returns the handler.
private static void SubscribeAdapter(
PerspexPropertyChangedEventArgs e,
Func> handler)
where TTarget : class
{
var target = e.Sender as TTarget;
if (target != null)
{
handler(target)(e);
}
}
}
}