【原创】Binding.Path 属性包含.句号如何绑定和排序?
2011-07-31 1:29
每个绑定通常都具有四个组件:绑定目标对象、目标属性、绑定源,以及要使用的绑定源值的路径。 有关这些数据绑定概念的更多信息,请参见数据绑定概述。
使用Path属性可以指定您要绑定到的源值:
-
在最简单的情况下,Path属性值是要用于绑定的源对象的属性名,如Path=PropertyName。 -
通过类似于 C# 中使用的语法,可以指定属性的子属性。 例如,子句Path=ShoppingCart.Order设置与对象或属性ShoppingCart的Order子属性的绑定。 -
若要绑定到附加属性,应在附加属性周围放置圆括号。 例如,若要绑定到附加属性 DockPanel.Dock,则语法是Path=(DockPanel.Dock)。 -
可以在要应用索引器的属性名后面的方括号内指定属性的索引器。 例如,子句Path=ShoppingCart[0]将绑定设置为与属性的内部索引处理文本字符串“0”的方式对应的索引。 此外,还支持多个索引器。 -
可以在Path子句中混合索引器和子属性;例如,Path=ShoppingCart.ShippingInfo[MailingAddress,Street]. -
在索引器内部,您可以有多个由逗号 (,) 分隔的索引器参数。 可以使用圆括号指定每个参数的类型。 例如,您可以有Path="[(sys:Int32)42,(sys:Int32)24]",其中sys映射到System命名空间。 -
如果源为集合视图,则可以用斜杠 (/) 指定当前项。 例如,子句Path=/用于设置到视图中当前项的绑定。 如果源为集合,则此语法指定默认集合视图的当前项。 -
可以结合使用属性名和斜杠来遍历作为集合的属性。 例如,Path=/Offices/ManagerName指定源集合的当前项,该源集合包含也作为集合的Offices属性。 其当前项是一个包含ManagerName属性的对象。 -
PART_TopHeaderGripper 例如,Text="{Binding}"等效于Text="{Binding Path=.}"。
有关路径语法的信息,请参见绑定声明概述或PropertyPath XAML 语法。
有关 XML 绑定,请参见XPath属性。
若要绑定到整个对象,则不必指定Path属性。 有关更多信息,请参见数据绑定概述中的“指定值的路径”。 绑定索引器示例: 1.ViewModel usingSystem; usingSystem.Data; namespaceBindingWithPeriod { publicclassTestViewModel { publicTestViewModel() { CurrentDataTable=newDataTable(); CurrentDataTable.Columns.Add(newDataColumn("ID",typeof(string))); CurrentDataTable.Columns.Add(newDataColumn("Number.A",typeof(int))); Random random=newRandom(); for(inti=1; i<=100; i++) { DataRow row=CurrentDataTable.NewRow(); row[0]=i.ToString(); row[1]=random.Next(-10000,10000); CurrentDataTable.Rows.Add(row); } } publicDataTable CurrentDataTable {get;set; } } } 2.Binding //如果列名包含句号,则给他一个新的绑定 //为了兼容句号,新绑定用[]索引器,索引器内可含句号. if(e.PropertyName.Contains(".")) { stringpath=string.Format("[{0}]", e.PropertyName); ((DataGridBoundColumn)e.Column).Binding=newBinding(path); } 3.排序 stringcolumnName=e.Column.Header.ToString(); //如果列名包好句号,则去除[]使DataView自动排序 //SortMemberPath可以包含句号,详见MSDN,故去除用于排序 if(columnName.Contains(".")) { e.Column.SortMemberPath=columnName.Trim(newchar[] {'[',']'}); }
|