diff --git a/src/Perspex.Base/PerspexObject.cs b/src/Perspex.Base/PerspexObject.cs index 25e0ff48be..b95758a7e7 100644 --- a/src/Perspex.Base/PerspexObject.cs +++ b/src/Perspex.Base/PerspexObject.cs @@ -775,7 +775,11 @@ namespace Perspex validate2 = v => validate(this, v); } - PriorityValue result = new PriorityValue(property.Name, property.PropertyType, validate2); + PriorityValue result = new PriorityValue( + property.Name, + property.PropertyType, + validate2, + _propertyLog); result.Changed.Subscribe(x => { diff --git a/src/Perspex.Base/PriorityValue.cs b/src/Perspex.Base/PriorityValue.cs index 0bbdcc389e..e45eba172f 100644 --- a/src/Perspex.Base/PriorityValue.cs +++ b/src/Perspex.Base/PriorityValue.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Reactive.Subjects; using System.Text; using Perspex.Utilities; +using Serilog; namespace Perspex { @@ -54,19 +55,30 @@ namespace Perspex /// private readonly Func _validate; + /// + /// An optional logger. + /// + private ILogger _logger; + /// /// Initializes a new instance of the class. /// /// The name of the property. /// The value type. /// An optional validation function. - public PriorityValue(string name, Type valueType, Func validate = null) + /// An optional logger + public PriorityValue( + string name, + Type valueType, + Func validate = null, + ILogger logger = null) { _name = name; _valueType = valueType; _value = PerspexProperty.UnsetValue; ValuePriority = int.MaxValue; _validate = validate; + _logger = logger; } /// @@ -225,9 +237,13 @@ namespace Perspex _value = value; _changed.OnNext(Tuple.Create(old, _value)); } - else + else if (_logger != null) { - // TODO: Log error. + _logger.Error( + "Binding produced invalid value for {$Type} {$Property}: {$Value}", + _valueType, + _name, + value); } } diff --git a/tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj b/tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj index 078613a34d..be37a88865 100644 --- a/tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj +++ b/tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj @@ -40,6 +40,14 @@ 4 + + ..\..\packages\Serilog.1.5.9\lib\net45\Serilog.dll + True + + + ..\..\packages\Serilog.1.5.9\lib\net45\Serilog.FullNetFx.dll + True + ..\..\packages\xunit.assert.2.0.0\lib\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.assert.dll diff --git a/tests/Perspex.Base.UnitTests/packages.config b/tests/Perspex.Base.UnitTests/packages.config index b87bf5fff7..00922fa4e2 100644 --- a/tests/Perspex.Base.UnitTests/packages.config +++ b/tests/Perspex.Base.UnitTests/packages.config @@ -3,6 +3,7 @@ +