【问题标题】:What is the Relevence of Braces in an XAML Binding Path DeclarationXAML 绑定路径声明中大括号的相关性是什么
【发布时间】:2013-06-14 09:14:28
【问题描述】:

总之,这个问题很简单。以下绑定不起作用,即关联的Trigger 不会触发

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

为了解决这个问题并使绑定工作,我们将绑定引用放在大括号中,如下所示

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

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

感谢您的宝贵时间。

【问题讨论】:

标签: c# wpf binding


【解决方案1】:

这是因为绑定无法确定要绑定到的完整表达式。如果将其放入大括号中,则可以正确确定完整的表达式(带有命名空间等)。

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

我希望你最终得到我:)

【讨论】:

  • 是的,但是为什么?为什么牙套有区别?这是两种语法之间的明确区别,但您的回答并未解决这个事实......
【解决方案2】:

多属性(间接属性定位)

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

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

单个属性,附加或其他类型限定

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

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

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

  2. 该属性是附加属性。

  3. 您正在绑定到静态属性。

要用作情节提要目标,指定为 propertyName 的属性必须是 DependencyProperty

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2010-09-19
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多