给定此类/属性,我将如何编写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。

09-30 15:29
查看更多