@@ -246,7 +246,36 @@ private object CreateMultiBinding(IServiceProvider serviceProvider)
246
246
multiBinding . Bindings . Add ( this . TargetVisualBinding ) ;
247
247
}
248
248
249
- return multiBinding . ProvideValue ( serviceProvider ) ;
249
+ return multiBinding . ProvideValue ( new ServiceProviderWrapper ( serviceProvider ) ) ;
250
+ }
251
+
252
+ private class ServiceProviderWrapper : IServiceProvider , IProvideValueTarget
253
+ {
254
+ private readonly IServiceProvider serviceProvider ;
255
+
256
+ public ServiceProviderWrapper ( IServiceProvider serviceProvider )
257
+ {
258
+ this . serviceProvider = serviceProvider ;
259
+ }
260
+
261
+ /// <inheritdoc />
262
+ public object ? GetService ( Type serviceType )
263
+ {
264
+ if ( serviceType == typeof ( IProvideValueTarget ) )
265
+ {
266
+ return this ;
267
+ }
268
+
269
+ return this . serviceProvider . GetService ( serviceType ) ;
270
+ }
271
+
272
+ /// <inheritdoc />
273
+ public object ? TargetObject => ( ( IProvideValueTarget ) this . serviceProvider ) . TargetObject is DependencyObject dpo
274
+ ? dpo
275
+ : null ;
276
+
277
+ /// <inheritdoc />
278
+ public object TargetProperty => ( ( IProvideValueTarget ) this . serviceProvider ) . TargetProperty ;
250
279
}
251
280
252
281
private object ? Convert ( object ? value , Visual ? targetVisual , Size desiredSize , Type targetType )
@@ -366,9 +395,17 @@ private object CreateMultiBinding(IServiceProvider serviceProvider)
366
395
{
367
396
var type = expression . GetType ( ) ;
368
397
var method = type . GetMethod ( "GetValue" , BindingFlags . Instance | BindingFlags . Public | BindingFlags . NonPublic ) ;
398
+ var field = type . GetField ( "_targetObject" , BindingFlags . Instance | BindingFlags . Public | BindingFlags . NonPublic ) ;
369
399
370
- if ( method is not null )
400
+ if ( method is not null
401
+ && field is not null )
371
402
{
403
+ // We have to set the target object. otherwise we might hit debug asserts.
404
+ if ( field . GetValue ( expression ) is null )
405
+ {
406
+ field . SetValue ( expression , targetVisual ) ;
407
+ }
408
+
372
409
var valueFromExpression = method . Invoke ( expression , new object [ ]
373
410
{
374
411
targetVisual ,
0 commit comments