1. Fixed some tests to expect `BindingNotification`s to be returned on a broken binding chain.
2. Changed logging of `BindingNotification`s - log at `Warning` level (instead of `Error`) except when the binding chain is broken at the root, in which case log at `Information` level. Do this to prevent flooding the output window when initializing.
`AvaloniaPropertyAccessorPlugin` now checks that the requested property is available as a `AvaloniaProperty` on the target, and if not returns a `false` match. This means that the binding will be passed on to the `InpcPropertyAccessorPlugin`.
There was a problem in `WeakSubscriptionManager` in that an `AvaloniaObject` exposes 2 `PropertyChanged` events and `WeakSubscriptionManager` was picking up the `AvaloniaObject` one. Had to make `WeakSubscriptionManager.Subscribe` generic on the target parameter so that the requested event (`INotifyPropertyChanged.PropertyChanged`) was found instead.
Use `CurrentCulture` instead of `CurrentUICulture` in converters etc. `CurrentUICulture` should be used for translations, `CurrentCulture` should be used for things like numbers, dates etc.
They were not correct before. Also clarified the two types of
conversions:
- `TryConvertImplicit` implements the implicit conversions allowed by
the C# language
- `TryConvert` tries every means at its disposal to convert a value to a
type
`AvaloniaObject` uses only implicit conversions. This allows one to
write:
```
var control = new TextBlock
{
[Canvas.TopProperty] = 10
}
```
Without implicit conversions, this would fail because `Canvas.Top` is a
`double` whereas `10` is an `int`, however only implicit conversions
should be used here, otherwise the following would pass, which is
probably not what would be wanted:
```
var control = new TextBlock
{
[TextBlock.TextProperty] = observable, // Text is now the type name of
`observable`
}
```
`DefaultValueConverter` uses `TryConvert`, i.e. every conversion
possible.
Fixes#972.