|
|
@ -401,17 +401,22 @@ namespace Perspex |
|
|
GetDescription(source)); |
|
|
GetDescription(source)); |
|
|
|
|
|
|
|
|
IDisposable subscription = null; |
|
|
IDisposable subscription = null; |
|
|
|
|
|
IDisposable validationSubcription = null; |
|
|
|
|
|
|
|
|
subscription = source |
|
|
subscription = source |
|
|
.Where(x => !(x is ValidationStatus)) |
|
|
.Where(x => !(x is ValidationStatus)) |
|
|
.Select(x => CastOrDefault(x, property.PropertyType)) |
|
|
.Select(x => CastOrDefault(x, property.PropertyType)) |
|
|
.Do(_ => { }, () => s_directBindings.Remove(subscription)) |
|
|
.Do(_ => { }, () => s_directBindings.Remove(subscription)) |
|
|
.Subscribe(x => DirectBindingSet(property, x)); |
|
|
.Subscribe(x => DirectBindingSet(property, x)); |
|
|
|
|
|
validationSubcription = source.OfType<ValidationStatus>().Subscribe(x => ValidationChanged(property, x)); |
|
|
|
|
|
|
|
|
s_directBindings.Add(subscription); |
|
|
s_directBindings.Add(subscription); |
|
|
|
|
|
s_directBindings.Add(validationSubcription); |
|
|
|
|
|
|
|
|
return Disposable.Create(() => |
|
|
return Disposable.Create(() => |
|
|
{ |
|
|
{ |
|
|
|
|
|
validationSubcription.Dispose(); |
|
|
|
|
|
s_directBindings.Remove(validationSubcription); |
|
|
subscription.Dispose(); |
|
|
subscription.Dispose(); |
|
|
s_directBindings.Remove(subscription); |
|
|
s_directBindings.Remove(subscription); |
|
|
}); |
|
|
}); |
|
|
|