/// <summary> /// Handle the Loaded event of the element to which this view model is attached /// in order to enable the attached /// view model to bind to properties of the parent element /// </summary> static void Element_Loaded(object sender, RoutedEventArgs e) { FrameworkElement targetElement = sender as FrameworkElement; CircularProgressBarViewModel attachedModel = GetAttach(targetElement); // find the ProgressBar and associated it with the view model var progressBar = targetElement.Ancestors <ProgressBar>().Single() as ProgressBar; attachedModel.SetProgressBar(progressBar); }
/// <summary> /// Change handler for the Attach property /// </summary> private static void OnAttachChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { // set the view model as the DataContext for the rest of the template FrameworkElement targetElement = d as FrameworkElement; CircularProgressBarViewModel viewModel = e.NewValue as CircularProgressBarViewModel; targetElement.DataContext = viewModel; // handle the loaded event targetElement.Loaded += new RoutedEventHandler(Element_Loaded); }
public static void SetAttach(DependencyObject d, CircularProgressBarViewModel value) { d.SetValue(AttachProperty, value); }