WPF:数据绑定到参数化属性

Jon*_*len 1 vb.net wpf binding

鉴于此类/属性,我将如何编写 WPF 数据绑定表达式来获取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
Run Code Online (Sandbox Code Playgroud)

Ray*_*rns 6

只要您的索引属性声明为默认值,绑定的索引器语法就应该适用于您:

Default Public Property DataItem(ByVal name As String) As Object 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以使用:

<TextBox Text="{Binding Token[Phone]}" />
Run Code Online (Sandbox Code Playgroud)

或者如果您的令牌是您的 DataContext 只是:

<TextBox Text="{Binding [Phone]}" />
Run Code Online (Sandbox Code Playgroud)

WPF 的绑定语法没有访问非默认索引器的机制。如果您无法将索引器设为默认值,则必须使用转换器:

<TextBox Text="{Binding Token,ConverterParameter=Phone,Converter={x:Static my:DataItemAccessor.Instance}}" />
Run Code Online (Sandbox Code Playgroud)

DataItemAccessor您编写的实现 IValueConverter 并访问 DataItem 的普通类在哪里。