【发布时间】:2017-11-08 08:51:47
【问题描述】:
请帮我检查数据绑定属性。
我想检查是否在 xaml 中为某些属性使用了绑定 所以我写了类似的代码
var uielement = something as FrameworkElement;
if (uielement != null)
{
var sizeBinding = new[] { FrameworkElement.WidthProperty, FrameworkElement.HeightProperty }.Select(_ => uielement.GetBindingExpression(_)).ToList();
if (sizeBinding.Count(_ => _ != null) > 0)
{
Trace.WriteLine(string.Format("found {0} bindings", sizeBinding.Count()));
}
}
我已经在 xaml 元素上检查了这一点,其中 Height 和 Width 属性绑定到数据上下文
<UserControl Width="{Binding Size.Width, Mode=TwoWay}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
这应该采用框架元素的 Width 和 Height 属性并检查(使用GetBindingExpression 方法)绑定是否应用于这些属性。
Size 是 System.Windows.Size 类型的数据上下文对象的属性。
上面的 C# 代码适用于 xaml 代码。 但是,当绑定表达式具有最简单的形式时,例如
<UserControl Width="{Binding Size.Width}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
然后 sizeBinding 的第一个元素为空(对于宽度)和高度绑定的绑定表达式实例。
我可以接受为绑定设置的 mode=TwoWay,但是我想知道如果 Mode 未设置为 TwoWay,为什么不创建绑定实例。我认为这是因为表达式需要比路径更复杂。但是我试过Width="{Binding Size.Width, Mode=OneWay}" 但GetBindingExpression 为这样的绑定返回null。
我尝试过BindingOperations GetBinding* 方法,但它们的行为与FrameworkElement.GetBindingExpression 完全相同。
我用谷歌搜索的唯一一个问题是this one。但我不清楚
【问题讨论】:
标签: c# wpf data-binding .net-4.5