/
AttachServiceBehavior.cs
37 lines (32 loc) · 1.36 KB
/
AttachServiceBehavior.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using DevExpress.Mvvm.UI;
using DevExpress.Mvvm.UI.Interactivity;
using System.Windows;
namespace FrameNavigation.Common {
public class AttachServiceBehavior : Behavior<DependencyObject> {
public static readonly DependencyProperty AtachableServiceProperty =
DependencyProperty.Register(nameof(AtachableService), typeof(ServiceBase), typeof(AttachServiceBehavior), new PropertyMetadata(null, OnAtachableServiceChanged));
static void OnAtachableServiceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
(e.OldValue as ServiceBase)?.Detach();
((AttachServiceBehavior)d).AttachService();
}
public ServiceBase AtachableService {
get => (ServiceBase)GetValue(AtachableServiceProperty);
set => SetValue(AtachableServiceProperty, value);
}
protected override void OnAttached() {
base.OnAttached();
AttachService();
}
protected override void OnDetaching() {
base.OnDetaching();
AtachableService?.Detach();
}
void AttachService() {
if(AtachableService == null || AssociatedObject == null)
return;
if(AtachableService.IsAttached)
AtachableService.Detach();
AtachableService.Attach(AssociatedObject);
}
}
}