FrameworkElement.GetBindingExpression returns 数据绑定元素为 null
FrameworkElement.GetBindingExpression returns null for databound element
请帮我检查数据绑定属性。
我想检查是否在 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>
这应该采用框架元素的宽度和高度属性,并检查(使用 GetBindingExpression
方法)绑定是否应用于这些属性。
Size 是 属性 类型的数据上下文对象 System.Windows.Size.
上面的 C# 代码适用于 xaml 代码。
但是,当绑定表达式具有最简单的形式时,例如
<UserControl Width="{Binding Size.Width}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
然后 sizeBinding 具有第一个元素 null(对于宽度)和绑定表达式实例的高度。
我可以忍受为绑定设置 mode=TwoWay,但是我想知道如果模式未设置为 TwoWay,为什么不创建绑定实例。我认为这是因为表达式需要比路径更复杂。但是我试过 Width="{Binding Size.Width, Mode=OneWay}"
但 GetBindingExpression
returns null 像这样绑定。
我试过 BindingOperations
GetBinding* 方法,但它们的行为与 FrameworkElement.GetBindingExpression
.
完全相同
我用谷歌搜索的唯一一个问题是 this one。但是我不清楚
原因很可能是您在建立绑定后在某处显式设置了 UserControl 的 Width
属性。
这样做会删除单向绑定(即用另一个 local value 替换它),但保留双向绑定(并更新其源 属性)。
请帮我检查数据绑定属性。
我想检查是否在 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>
这应该采用框架元素的宽度和高度属性,并检查(使用 GetBindingExpression
方法)绑定是否应用于这些属性。
Size 是 属性 类型的数据上下文对象 System.Windows.Size.
上面的 C# 代码适用于 xaml 代码。 但是,当绑定表达式具有最简单的形式时,例如
<UserControl Width="{Binding Size.Width}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
然后 sizeBinding 具有第一个元素 null(对于宽度)和绑定表达式实例的高度。
我可以忍受为绑定设置 mode=TwoWay,但是我想知道如果模式未设置为 TwoWay,为什么不创建绑定实例。我认为这是因为表达式需要比路径更复杂。但是我试过 Width="{Binding Size.Width, Mode=OneWay}"
但 GetBindingExpression
returns null 像这样绑定。
我试过 BindingOperations
GetBinding* 方法,但它们的行为与 FrameworkElement.GetBindingExpression
.
我用谷歌搜索的唯一一个问题是 this one。但是我不清楚
原因很可能是您在建立绑定后在某处显式设置了 UserControl 的 Width
属性。
这样做会删除单向绑定(即用另一个 local value 替换它),但保留双向绑定(并更新其源 属性)。