using System.Windows;

namespace TimeScheduler.Common
{
  /// <summary>Hilfsklasse, mit der man in andere Datenkontexte greifen kann</summary>
  /// <example>
  /// Vorbereitung:
  /// <code language="xaml">
  /// &lt;FrameworkElement.Resources&gt;
  ///   &lt;c:BindingProxy x:Key="proxy" Data="{Binding}"&gt;
  /// &lt;/FrameworkElement.Resources&gt;
  /// </code>
  /// Verwendung an einer anderen Stelle:
  /// <code language="xaml">
  /// &lt;FrameworkElement Property="{Binding Source={StaticResource proxy},Path=VMProperty}"&gt;
  /// </code>
  /// </example>
  public class BindingProxy : Freezable
  {
    #region Konstruktion
    /// <summary>Standard-Konstruktor</summary>
    public BindingProxy() { }
    #endregion  

    #region Überschreibungen
    /// <summary>Ermittelt das Hauptobjekt</summary>
    /// <returns>Ein neues Hauptobjekt</returns>
    protected override Freezable CreateInstanceCore() { return new BindingProxy(); }
    #endregion

    #region Eigenschaften
    /// <summary>Getter/Setter für <see cref="DataProperty"/></summary>
    public object Data { get { return GetValue(DataProperty); } set { SetValue(DataProperty, value); } }
    /// <summary>Eigenschaft in der der Datenkontext gebunden wird</summary>
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new PropertyMetadata(null));
    #endregion
  }
}
