Skip to content

Commit f62b1d8

Browse files
committed
Style + clean up some of the Disposable usage
1 parent 4cf5b32 commit f62b1d8

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed
Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Reactive.Disposables;
45
using System.Reactive.Linq;
56
using System.Text;
67
using System.Threading.Tasks;
@@ -13,54 +14,65 @@ namespace ReactiveUI.Blend
1314
[ContentProperty(Name = "Actions")]
1415
public sealed class ObservableTriggerBehavior : Behavior<DependencyObject>
1516
{
16-
private object resolvedSource;
17+
object resolvedSource;
18+
SerialDisposable watcher;
19+
20+
public ObservableTriggerBehavior()
21+
{
22+
watcher = new SerialDisposable();
23+
watcher.Disposable = Disposable.Empty;
24+
}
1725

1826
public ActionCollection Actions
1927
{
2028
get {
21-
ActionCollection actionCollection = (ActionCollection) this.GetValue(ObservableTriggerBehavior.ActionsProperty);
29+
var actionCollection = (ActionCollection) this.GetValue(ObservableTriggerBehavior.ActionsProperty);
30+
2231
if (actionCollection == null) {
2332
actionCollection = new ActionCollection();
2433
this.SetValue(ObservableTriggerBehavior.ActionsProperty, actionCollection);
2534
}
35+
2636
return actionCollection;
2737
}
2838
}
39+
2940
public static readonly DependencyProperty ActionsProperty =
3041
DependencyProperty.Register("Actions", typeof(ActionCollection), typeof(ObservableTriggerBehavior), new PropertyMetadata(null));
3142

32-
public object SourceObject
33-
{
43+
public object SourceObject {
3444
get { return this.GetValue(ObservableTriggerBehavior.SourceObjectProperty); }
3545
set { this.SetValue(ObservableTriggerBehavior.SourceObjectProperty, value); }
3646
}
3747
public static readonly DependencyProperty SourceObjectProperty =
3848
DependencyProperty.Register("SourceObject", typeof(object), typeof(ObservableTriggerBehavior), new PropertyMetadata(null, OnSourceObjectChanged));
3949

40-
private static void OnSourceObjectChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
41-
{
42-
ObservableTriggerBehavior observableTriggerBehavior = (ObservableTriggerBehavior)dependencyObject;
43-
observableTriggerBehavior.SetResolvedSource(observableTriggerBehavior.ComputeResolvedSource());
44-
}
50+
public bool AutoResubscribeOnError { get; set; }
4551

46-
public IObservable<object> Observable
47-
{
52+
public IObservable<object> Observable {
4853
get { return (IObservable<object>)GetValue(ObservableProperty); }
4954
set { SetValue(ObservableProperty, value); }
5055
}
5156
public static readonly DependencyProperty ObservableProperty =
5257
DependencyProperty.Register("Observable", typeof(IObservable<object>), typeof(ObservableTriggerBehavior), new PropertyMetadata(null, onObservableChanged));
5358

54-
private void SetResolvedSource(object newSource)
59+
static void OnSourceObjectChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
60+
{
61+
var observableTriggerBehavior = (ObservableTriggerBehavior)dependencyObject;
62+
63+
observableTriggerBehavior.setResolvedSource(observableTriggerBehavior.computeResolvedSource());
64+
}
65+
66+
void setResolvedSource(object newSource)
5567
{
56-
if (this.AssociatedObject == null || this.resolvedSource == newSource)
57-
{
68+
if (this.AssociatedObject == null || this.resolvedSource == newSource) {
5869
return;
5970
}
71+
6072
this.resolvedSource = newSource;
6173
}
6274

63-
private object ComputeResolvedSource()
75+
object computeResolvedSource()
6476
{
6577
if (this.ReadLocalValue(ObservableTriggerBehavior.SourceObjectProperty) != DependencyProperty.UnsetValue) {
6678
return this.SourceObject;
@@ -69,19 +81,11 @@ private object ComputeResolvedSource()
6981
}
7082
}
7183

72-
public bool AutoResubscribeOnError { get; set; }
73-
74-
IDisposable watcher;
75-
protected static void onObservableChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
84+
static void onObservableChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
7685
{
7786
ObservableTriggerBehavior This = (ObservableTriggerBehavior)sender;
78-
if (This.watcher != null)
79-
{
80-
This.watcher.Dispose();
81-
This.watcher = null;
82-
}
8387

84-
This.watcher = ((IObservable<object>)e.NewValue).ObserveOn(RxApp.MainThreadScheduler).Subscribe(
88+
This.watcher.Disposable = ((IObservable<object>)e.NewValue).ObserveOn(RxApp.MainThreadScheduler).Subscribe(
8589
x => Interaction.ExecuteActions(This.resolvedSource, This.Actions, x),
8690
ex =>
8791
{
@@ -94,13 +98,15 @@ protected static void onObservableChanged(DependencyObject sender, DependencyPro
9498
protected override void OnAttached()
9599
{
96100
base.OnAttached();
97-
this.SetResolvedSource(this.ComputeResolvedSource());
101+
this.setResolvedSource(this.computeResolvedSource());
98102
}
99103

100104
protected override void OnDetaching()
101105
{
102-
this.SetResolvedSource(null);
106+
this.setResolvedSource(null);
103107
base.OnDetaching();
108+
109+
watcher.Dispose();
104110
}
105111
}
106112
}

0 commit comments

Comments
 (0)