我最近遇到了WPF的问题。不在VisualTree中的属性无法获取datacontext来处理绑定。我举了一个例子。
<Path>
<Path.Data>
<CombinedGeometry>
<CombinedGeometry.Geometry1>
<RectangleGeometry.Transform>
<ScaleTransform ScaleY="{Binding WhatScale, Converter={StaticResource DoSomethingAwesome}, FallbackValue=1, TargetNullValue=1}"/>
</RectangleGeometry.Transform>
</CombinedGeometry.Geometry1>
...
</CombinedGeometry>
</Path.Data>
</Path>
我通过添加一个虚拟引用对象并将其添加为绑定源
来解决这个问题<FrameworkElement x:Name="DummyElement"/>
...
ScaleY="{Binding DataContext.WhatScale, Converter="{StaticResource DoSomethingAwesome}", Source="{x:Reference DummyElement}}"
但是:我仍然会收到这些烦人的信息控制台消息
BindingExpression cannot retrieve value from null data item.
This could happen when binding is detached or when binding to a
Nullable type that has no value. BindingExpression:Path=DataContext.WhatScale
UserControl是从ItemsControl呈现的,我相信的问题是DataContext在初始化时是空的,并且在设置之后直接使代码仍然有效。但是,我真的不喜欢我得到的“信息”,我想了解会发生什么以及如何避免它。
谢谢!