什么是XAML绑定路径声明中的大括号的相关性

时间:2013-06-14 09:14:28

标签: c# wpf binding

全部,问题很简单。以下绑定工作,即ascociated Trigger不会触发

<DataTrigger Binding="{Binding dataAccess:DataGridTextSearch.IsAnyTextMatch, 
    ElementName=dataGrid}" Value="false"> 

要修复此问题并使绑定工作,我们将绑定引用放在大括号中,如下所示

<DataTrigger Binding="{Binding (dataAccess:DataGridTextSearch.IsAnyTextMatch), 
    ElementName=dataGrid}" Value="false"> 

为什么添加大括号会解决引用/绑定问题以及发生了什么?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

这是因为Binding无法确定要绑定到的完整Expression。如果你把它放到括号中,可以正确地确定完整的表达式(带命名空间等)。

如果用括号写(dataAccess:DataGridTextSearch.IsAnyTextMatch),标记解析器会将整个绑定作为一个表达式。否则它会试图绑定到dataAccess:。使用大括号,您将明确声明这是单个表达式

我希望你能得到我:)

答案 1 :(得分:0)

多个属性(间接属性定位)

<Binding Path="propertyName.propertyName2" .../>

propertyName必须解析为当前DataContext的属性的名称。路径属性propertyNamepropertyName2可以是关系中存在的任何属性,其中propertyName2是存在于propertyName的值类型上的属性。 / p>

单一属性,附加或其他类型合格

<object property="(ownerType.propertyName)" .../>

括号表示PropertyPath中的此属性应使用部分限定条件构造。它可以使用XML命名空间来查找具有适当映射的类型。 ownerType通过每个程序集中的XmlnsDefinitionAttribute声明搜索XAML处理器可以访问的类型。大多数应用程序都具有映射到http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间的默认XML命名空间,因此通常只有自定义类型或类型在该命名空间之外才需要前缀。 propertyName必须解析为ownerType上存在的属性的名称。此语法通常用于以下情况之一:

  1. 路径在XAML中指定,该路径位于没有指定目标类型的样式或模板中。合格用法通常对除此之外的其他情况无效,因为在非样式的非模板情况下,该属性存在于实例上,而不是类型。

  2. 该物业是附属物。

  3. 您绑定到静态属性。

  4. 要用作故事板目标,指定为propertyName的属性必须为DependencyProperty