给定此类/属性,我将如何编写WPF数据绑定(bind)表达式以获取myToken.DataItem("Phone")
?
Class Token
Public Property DataItem(ByVal name As String) As Object
Get
If m_DataPoints.ContainsKey(name) Then Return m_DataPoints(name) Else Return Nothing
End Get
Set(ByVal value As Object)
Dim oldValue = DataItem(name)
If Object.Equals(oldValue, value) Then Return
m_DataPoints(name) = value
OnPropertyChanged("DataPoint")
End Set
End Property
End Class
最佳答案
只要将indexed属性声明为默认值,绑定(bind)的索引器语法就应该对您有用:
Default Public Property DataItem(ByVal name As String) As Object
在这种情况下,您可以使用:
<TextBox Text="{Binding Token[Phone]}" />
或者如果您的 token 是您的DataContext:
<TextBox Text="{Binding [Phone]}" />
WPF的Binding语法没有访问非默认索引器的机制。如果无法将索引器设置为默认值,则必须使用转换器:
<TextBox Text="{Binding Token,ConverterParameter=Phone,Converter={x:Static my:DataItemAccessor.Instance}}" />
其中
DataItemAccessor
是编写的琐碎类,该类实现IValueConverter和访问的DataItem。