/// <summary> /// Initializes a new instance of the <see cref="DependencyObserver"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="methodFactory">The method factory.</param> /// <param name="notifier">The notifier.</param> public DependencyObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier) { this.messageHandler = messageHandler; this.methodFactory = methodFactory; this.notifier = notifier; singlePathObservers = new Dictionary <string, SinglePropertyPathObserver>(); }
/// <summary> /// Adds a message handler at the specified location in the UI hierarchy. /// </summary> /// <param name="uiElement">The UI element.</param> /// <param name="handler">The message handler.</param> /// <param name="setContext">if set to <c>true</c> the handler will also be stored in the element's DataContext and ViewMetadata will be set.</param> public void AddHandler(DependencyObject uiElement, IRoutedMessageHandler handler, bool setContext) { var node = FindOrAddNode(uiElement); node.RegisterHandler(handler); if (setContext) { var unwrappedValue = handler.Unwrap(); var frameworkElement = uiElement as FrameworkElement; if (frameworkElement != null) { frameworkElement.DataContext = unwrappedValue; } #if !SILVERLIGHT else { var frameworkContentElement = uiElement as FrameworkContentElement; if (frameworkContentElement != null) { frameworkContentElement.DataContext = unwrappedValue; } } #endif } }
/// <summary> /// Initializes a new instance of the <see cref="DependencyObserver"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="methodFactory">The method factory.</param> /// <param name="notifier">The notifier.</param> public DependencyObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier) { _messageHandler = messageHandler; _methodFactory = methodFactory; _weakNotifier = new WeakReference<INotifyPropertyChanged>(notifier); _monitoringInfos = new Dictionary<string, MonitoringInfo>(); }
/// <summary> /// Initializes a new instance of the <see cref="DependencyObserver"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="methodFactory">The method factory.</param> /// <param name="notifier">The notifier.</param> public DependencyObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier) { _messageHandler = messageHandler; _methodFactory = methodFactory; _weakNotifier = new WeakReference <INotifyPropertyChanged>(notifier); _monitoringInfos = new Dictionary <string, MonitoringInfo>(); }
/// <summary> /// Initializes a new instance of the <see cref="EventMonitor"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="eventInfo">The event info.</param> internal EventMonitor(IRoutedMessageHandler messageHandler, EventInfo eventInfo) { this.messageHandler = messageHandler; triggersToNotify = new List <IMessageTrigger>(); EventHelper.WireEvent(messageHandler.Unwrap(), eventInfo, ChangedEventHandler); }
internal EventMonitor(IRoutedMessageHandler messageHandler, EventInfo eventInfo) { _messageHandler = messageHandler; _triggersToNotify = new List<IMessageTrigger>(); EventHelper.WireEvent(messageHandler.Unwrap(), eventInfo, ChangedEventHandler); }
//ref http://caliburn.codeplex.com/WorkItem/View.aspx?WorkItemId=6100 //see also http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=212171 public void backreferences_should_not_leak_the_observer() { var handlerRef = new WeakReference(handler); //this reference emulates a back pointer to a long-living model var parent = notifier.Model; ConfigureObserver(new[] { "Model.SomeModelProperty" }); //emulates the collection of the cluster composed by Screen, View, MessageHandler and ancillary filters //(included Dependecies along with its internal PropertyPathMonitor) observer = null; handler = null; GC.Collect(); GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers(); handlerRef.IsAlive.ShouldBeFalse(); //the first time a ppMonitor is notified AFTER the collection of its DependenyObserver, //it unregisters the unnecessary handler parent.NotifyOfPropertyChange("anyProperty"); parent.SubscriptionCount.ShouldBe(0); }
/// <summary> /// Initializes a new instance of the <see cref="DependencyObserver"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="methodFactory">The method factory.</param> /// <param name="notifier">The notifier.</param> public DependencyObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier) { _messageHandler = messageHandler; _methodFactory = methodFactory; _notifier = notifier; _singlePathObservers = new Dictionary<string, SinglePropertyPathObserver>(); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.Metadata.FirstOrDefaultOfType<AutoCheckAvailabilityHelper>(); if(helper == null) return; helper.MakeAwareOf(trigger); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var helper = messageHandler.Metadata.FirstOrDefaultOfType<AutoCheckAvailabilityHelper>(); if(helper != null) return; helper = new AutoCheckAvailabilityHelper(messageHandler); messageHandler.Metadata.Add(helper); }
/// <summary> /// Adds a message handler at the specified location in the UI hierarchy. /// </summary> /// <param name="uiElement">The UI element.</param> /// <param name="handler">The message handler.</param> /// <param name="setContext">if set to <c>true</c> the handler will also be stored in the element's DataContext and ViewMetadata will be set.</param> public void AddHandler(DependencyObject uiElement, IRoutedMessageHandler handler, bool setContext) { var node = FindOrAddNode(uiElement); node.RegisterHandler(handler); if(setContext) uiElement.SetDataContext(handler.Unwrap()); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var helper = messageHandler.GetMetadata<AutoCheckAvailabilityHelper>(); if(helper != null) return; helper = new AutoCheckAvailabilityHelper(messageHandler); messageHandler.AddMetadata(helper); }
internal AutoCheckAvailabilityHelper(IRoutedMessageHandler messageHandler) { _messageHandler = messageHandler; _triggersToNotify = new List<IMessageTrigger>(); _handlerReference = CommandManagerRequerySuggested; CommandManager.RequerySuggested += _handlerReference; }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.GetMetadata<DependencyObserver>(); if (helper == null) return; if (trigger.Message.RelatesTo(_target)) helper.MakeAwareOf(trigger, _dependencies); }
internal AutoCheckAvailabilityHelper(IRoutedMessageHandler messageHandler) { _messageHandler = messageHandler; _triggersToNotify = new List <IMessageTrigger>(); _handlerReference = CommandManagerRequerySuggested; CommandManager.RequerySuggested += _handlerReference; }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.Metadata.FirstOrDefaultOfType<DependencyObserver>(); if (helper == null) return; if (trigger.Message.RelatesTo(target)) helper.MakeAwareOf(trigger, dependencies); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { if (!AffectsTriggers) return; //deals with INPC classes TryHookDependencyObserver(messageHandler); //deals with XXXChanged events TryHookEventMonitor(messageHandler); }
protected override void given_the_context_of() { container = Mock <IServiceLocator>(); methodHost = new TheMethodHost(); handler = Mock <IRoutedMessageHandler>(); handler.Stub(x => x.Unwrap()).Return(methodHost); trigger = Stub <IMessageTrigger>(); trigger.Message = Stub <IRoutedMessage>(); }
protected override void given_the_context_of() { container = Mock<IServiceLocator>(); methodHost = new TheMethodHost(); handler = Mock<IRoutedMessageHandler>(); handler.Stub(x => x.Unwrap()).Return(methodHost); trigger = Stub<IMessageTrigger>(); trigger.Message = Stub<IRoutedMessage>(); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.GetMetadata <AutoCheckAvailabilityHelper>(); if (helper == null) { return; } helper.MakeAwareOf(trigger); }
protected override void given_the_context_of() { _expectationsWasSet = false; var methodFactory = new DefaultMethodFactory(); _handler = StrictMock<IRoutedMessageHandler>(); _notifier = new TheNotifierClass(); _observer = new DependencyObserver(_handler, methodFactory, _notifier); _trigger = Mock<IMessageTrigger>(); }
/// <summary> /// Adds a message handler at the specified location in the UI hierarchy. /// </summary> /// <param name="uiElement">The UI element.</param> /// <param name="handler">The message handler.</param> /// <param name="setContext">if set to <c>true</c> the handler will also be stored in the element's DataContext and ViewMetadata will be set.</param> public void AddHandler(DependencyObject uiElement, IRoutedMessageHandler handler, bool setContext) { var node = FindOrAddNode(uiElement); node.RegisterHandler(handler); if (setContext) { uiElement.SetDataContext(handler.Unwrap()); } }
protected override void given_the_context_of() { expectationsWasSet = false; var methodFactory = new DefaultMethodFactory(); handler = StrictMock <IRoutedMessageHandler>(); notifier = new TheNotifierClass(); observer = new DependencyObserver(handler, methodFactory, notifier); trigger = Mock <IMessageTrigger>(); }
/// <summary> /// Tries to hook the event. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="eventName">Name of the event.</param> /// <returns></returns> public static EventMonitor TryHook(IRoutedMessageHandler messageHandler, string eventName) { var target = messageHandler.Unwrap(); var eventInfo = target.GetType().GetEvent(eventName); if (eventInfo == null) { return(null); } return(new EventMonitor(messageHandler, eventInfo)); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) return; var helper = messageHandler.GetMetadata<DependencyObserver>(); if (helper != null) return; helper = new DependencyObserver(messageHandler, _methodFactory, notifier); messageHandler.AddMetadata(helper); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var helper = messageHandler.Metadata.FirstOrDefaultOfType <AutoCheckAvailabilityHelper>(); if (helper != null) { return; } helper = new AutoCheckAvailabilityHelper(messageHandler); messageHandler.Metadata.Add(helper); }
protected override void given_the_context_of() { methodFactory = Mock<IMethodFactory>(); info = typeof(MethodHost).GetMethod("Preview"); attribute = new PreviewAttribute("Preview"); container = Stub<IServiceLocator>(); container.Stub(x => x.GetInstance<IMethodFactory>()).Return(methodFactory).Repeat.Any(); routedMessageHandler = Mock<IRoutedMessageHandler>(); var metadata = new List<object>(); routedMessageHandler.Stub(x => x.Metadata).Return(metadata).Repeat.Any(); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var helper = messageHandler.GetMetadata <AutoCheckAvailabilityHelper>(); if (helper != null) { return; } helper = new AutoCheckAvailabilityHelper(messageHandler); messageHandler.AddMetadata(helper); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { if (!AffectsTriggers) { return; } //deals with INPC classes TryHookDependencyObserver(messageHandler); //deals with XXXChanged events TryHookEventMonitor(messageHandler); }
protected override void given_the_context_of() { methodFactory = Mock <IMethodFactory>(); info = typeof(MethodHost).GetMethod("Preview"); attribute = new PreviewAttribute("Preview"); container = Stub <IServiceLocator>(); container.Stub(x => x.GetInstance(typeof(IMethodFactory), null)).Return(methodFactory).Repeat.Any(); routedMessageHandler = Mock <IRoutedMessageHandler>(); var metadata = new List <object>(); routedMessageHandler.Stub(x => x.Metadata).Return(metadata).Repeat.Any(); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.Metadata.FirstOrDefaultOfType <DependencyObserver>(); if (helper == null) { return; } if (trigger.Message.RelatesTo(target)) { helper.MakeAwareOf(trigger, dependencies); } }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { var helper = messageHandler.GetMetadata <ItemDependencyObserver>(); if (helper == null) { return; } if (trigger.Message.RelatesTo(_target)) { helper.MakeAwareOf(trigger, _dependencies); } }
private void TryHookEventMonitor(IRoutedMessageHandler messageHandler) { var helper = messageHandler.Metadata.FirstOrDefaultOfType <EventMonitor>(); if (helper != null) { return; } helper = EventMonitor.TryHook(messageHandler, MethodName + "Changed"); if (helper != null) { messageHandler.Metadata.Add(helper); } }
//see http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=212171 for the rationale behind the finalizer removal public void backreferences_should_not_leak_the_observer_strict() { var handlerRef = new WeakReference(handler); var parent = notifier.Model; ConfigureObserver(new[] { "Model.SomeModelProperty" }); observer = null; handler = null; GC.Collect(); GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers(); handlerRef.IsAlive.ShouldBeFalse(); parent.SubscriptionCount.ShouldBe(0); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { if (!AffectsTriggers || !IsGetter) { return; } var helper = messageHandler.GetMetadata <DependencyObserver>(); if (helper == null) { return; } if (trigger.Message.RelatesTo(Target)) { helper.MakeAwareOf(trigger, new[] { MethodName }); } }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) { return; } var helper = messageHandler.GetMetadata <ItemDependencyObserver>(); if (helper != null) { return; } helper = new ItemDependencyObserver(messageHandler, _methodFactory, notifier); messageHandler.AddMetadata(helper); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) { return; } var helper = messageHandler.Metadata.FirstOrDefaultOfType <DependencyObserver>(); if (helper != null) { return; } helper = new DependencyObserver(messageHandler, methodFactory, notifier); messageHandler.Metadata.Add(helper); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { if (!AffectsTriggers || !trigger.Message.RelatesTo(Member)) { return; } var depObserver = messageHandler.Metadata.FirstOrDefaultOfType <DependencyObserver>(); if (IsGetter && depObserver != null) { depObserver.MakeAwareOf(trigger, new[] { MethodName }); } var evtMonitor = messageHandler.Metadata.FirstOrDefaultOfType <EventMonitor>(); if (evtMonitor != null) { evtMonitor.MakeAwareOf(trigger); } }
/// <summary> /// Adds a message handler at the specified location in the UI hierarchy. /// </summary> /// <param name="uiElement">The UI element.</param> /// <param name="handler">The message handler.</param> /// <param name="setContext">if set to <c>true</c> the handler will also be stored in the element's DataContext and ViewMetadata will be set.</param> public void AddHandler(DependencyObject uiElement, IRoutedMessageHandler handler, bool setContext) { var node = FindOrAddNode(uiElement); node.RegisterHandler(handler); if(setContext) { var unwrappedValue = handler.Unwrap(); var frameworkElement = uiElement as FrameworkElement; if(frameworkElement != null) frameworkElement.DataContext = unwrappedValue; #if !SILVERLIGHT else { var frameworkContentElement = uiElement as FrameworkContentElement; if(frameworkContentElement != null) frameworkContentElement.DataContext = unwrappedValue; } #endif } }
private void TryHookDependencyObserver(IRoutedMessageHandler messageHandler) { if (!IsGetter) { return; } var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) { return; } var helper = messageHandler.Metadata.FirstOrDefaultOfType <DependencyObserver>(); if (helper != null) { return; } helper = new DependencyObserver(messageHandler, methodFactory, notifier); messageHandler.Metadata.Add(helper); }
/// <summary> /// Sets the message handler for this node. /// </summary> /// <param name="messageHandler">The message handler.</param> public void RegisterHandler(IRoutedMessageHandler messageHandler) { this.messageHandler = messageHandler; this.messageHandler.Initialize(this); Log.Info("Handler {0} registered.", messageHandler); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { if (!AffectsTriggers) return; var helper = messageHandler.Metadata.FirstOrDefaultOfType<DependencyObserver>(); if (helper == null) return; if (trigger.Message.RelatesTo(_target)) { //helper.MakeAwareOf(trigger, new[] { _target.Name }); var actionMessage = trigger.Message as ActionMessage; if (actionMessage == null) return; //var handler = helper.Host.FindActionHandler(actionMessage); bool isAvailable = Execute(actionMessage, trigger.Node,null); trigger.UpdateAvailabilty(isAvailable); } }
//see http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=212171 for the rationale behind the finalizer removal public void backreferences_should_not_leak_the_observer_strict() { var handlerRef = new WeakReference(_handler); var parent = _notifier.Model; ConfigureObserver(new[] { "Model.SomeModelProperty" }); _observer = null; _handler = null; GC.Collect(); GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers(); Assert.That(handlerRef.IsAlive, Is.False); Assert.That(parent.SubscriptionCount, Is.EqualTo(0)); }
/// <summary> /// Initializes a new instance of the <see cref="SinglePropertyPathObserver"/> class. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="methodFactory">The method factory.</param> /// <param name="notifier">The notifier.</param> /// <param name="propertyPath">The property path.</param> public SinglePropertyPathObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier, string propertyPath) { this.messageHandler = messageHandler; monitor = new PropertyPathMonitor(methodFactory, notifier, propertyPath, this); }
public void AddHandler(DependencyObject uiElement, IRoutedMessageHandler handler, bool setContext) { throw new NotImplementedException(); }
//ref http://caliburn.codeplex.com/WorkItem/View.aspx?WorkItemId=6100 //see also http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=212171 public void backreferences_should_not_leak_the_observer() { var handlerRef = new WeakReference(_handler); //this reference emulates a back pointer to a long-living model var parent = _notifier.Model; ConfigureObserver(new[] { "Model.SomeModelProperty" }); //emulates the collection of the cluster composed by Screen, View, MessageHandler and ancillary filters //(included Dependecies along with its internal PropertyPathMonitor) _observer = null; _handler = null; GC.Collect(); GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers(); Assert.That(handlerRef.IsAlive, Is.False, "message handler has not been released"); //the first time a ppMonitor is notified AFTER the collection of its DependenyObserver, //it unregisters the unnecessary handler parent.NotifyOfPropertyChange("anyProperty"); Assert.That(parent.SubscriptionCount, Is.EqualTo(0), "subscription to parent model has not been removed"); }
/// <summary> /// Sets the message handler for this node. /// </summary> /// <param name="messageHandler">The message handler.</param> public void RegisterHandler(IRoutedMessageHandler messageHandler) { _messageHandler = messageHandler; _messageHandler.Initialize(this); }
public ChangedEventMonitor(EventInfo @event, object sender, IRoutedMessageHandler messageHandler) { if (@event != null) { EventHelper.WireEvent(sender, @event, (o, e) => { foreach (var trigger in _triggers) messageHandler.UpdateAvailability(trigger); }); } }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { if (!AffectsTriggers || !IsGetter) return; var helper = messageHandler.GetMetadata<DependencyObserver>(); if (helper == null) return; if (trigger.Message.RelatesTo(Target)) helper.MakeAwareOf(trigger, new[] { MethodName }); }
/// <summary> /// Makes the filter aware of the <see cref="IRoutedMessageHandler"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler) { if (!AffectsTriggers) return; var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) return; var helper = messageHandler.Metadata.FirstOrDefaultOfType<DependencyObserver>(); if (helper != null) return; helper = new DependencyObserver(messageHandler, _methodFactory, notifier); messageHandler.Metadata.Add(helper); }
private void TryHookDependencyObserver(IRoutedMessageHandler messageHandler) { //if (!IsGetter()) return; var notifier = messageHandler.Unwrap() as INotifyPropertyChanged; if (notifier == null) return; var helper = messageHandler.Metadata.FirstOrDefaultOfType<DependencyObserver>(); if (helper != null) return; helper = new DependencyObserver(messageHandler, _methodFactory, notifier); messageHandler.Metadata.Add(helper); }
private void TryHookEventMonitor(IRoutedMessageHandler messageHandler,string methodName) { var helper = messageHandler.Metadata.FirstOrDefaultOfType<EventMonitor>(); if (helper != null) return; helper = EventMonitor.TryHook(messageHandler, methodName + "Changed"); if (helper != null) messageHandler.Metadata.Add(helper); }
/// <summary> /// Makes the filter aware of the <see cref="IMessageTrigger"/>. /// </summary> /// <param name="messageHandler">The message handler.</param> /// <param name="trigger">The trigger.</param> public void MakeAwareOf(IRoutedMessageHandler messageHandler, IMessageTrigger trigger) { if (!AffectsTriggers || !trigger.Message.RelatesTo(Member)) return; var depObserver = messageHandler.Metadata.FirstOrDefaultOfType<DependencyObserver>(); if (IsGetter(_isInZoomMethod) && depObserver != null) depObserver.MakeAwareOf(trigger, new[] { _isInZoomMethodName }); if (IsGetter(_selectedItemsMethod) && depObserver != null) depObserver.MakeAwareOf(trigger, new[] { _selectedItemsMethodName }); //var evtMonitor = messageHandler.Metadata.FirstOrDefaultOfType<EventMonitor>(); //if (evtMonitor != null) // evtMonitor.MakeAwareOf(trigger); }
public MonitoringInfo(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier, string propertyPath) { _messageHandler = messageHandler; new PropertyPathMonitor(methodFactory, notifier, propertyPath, OnPathChanged); }
/// <summary> /// Sets the message handler for this node. /// </summary> /// <param name="messageHandler">The message handler.</param> public void RegisterHandler(IRoutedMessageHandler messageHandler) { _messageHandler = messageHandler; _messageHandler.Initialize(this); Log.Info("Handler {0} registered.", messageHandler); }
public SinglePropertyPathObserver(IRoutedMessageHandler messageHandler, IMethodFactory methodFactory, INotifyPropertyChanged notifier, string propertyPath) { _messageHandler = messageHandler; _monitor = new PropertyPathMonitor(methodFactory, notifier, propertyPath, this); }