using System.Windows;using System.Windows.Data;namespace Utilities{/// <summary>/// Allows binding to a viewmodel from within a data/contenttemplate that is bound to something else.////// Example:/// <UserControl.Resources>/// <DataContextProxy x:Key="dataContextProxy" />/// </UserControl.Resources>/// .../// <DataTemplate>/// <Button Content="Delete"/// Command="{Binding Source={StaticResource dataContextProxy}, Path=DataSource.DeleteClass}"/// CommandParameter="{Binding}" />/// </DataTemplate>////// </summary>public class DataContextProxy : FrameworkElement{public DataContextProxy(){this.Loaded += OnLoaded;}public string BindingPropertyName { get; set; }public BindingMode BindingMode { get; set; }public static readonly DependencyProperty DataSourceProperty = DependencyProperty.Register("DataSource", typeof(object), typeof(DataContextProxy), null);public object DataSource{get { return GetValue(DataSourceProperty); }set { SetValue(DataSourceProperty, value); }}private void OnLoaded(object sender, RoutedEventArgs e){var binding = new Binding();if (!string.IsNullOrEmpty(BindingPropertyName)){binding.Path = new PropertyPath(BindingPropertyName);}binding.Source = DataContext;binding.Mode = BindingMode;SetBinding(DataSourceProperty, binding);// this.Loaded -= this.OnLoaded;}}}
Wednesday, 20 November 2013
DataContextProxy
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment