您可以将数据绑定到包含Silverlight中的参数的属性吗?

时间:2010-04-14 10:44:20

标签: c# .net vb.net silverlight

在silverlight中,你能绑定到包含参数的属性吗?例如,以下似乎不起作用。我错过了什么或者这不可能吗?

C#

private System.Collections.Generic.Dictionary<string, string> ValuesField = new System.Collections.Generic.Dictionary<string, string>();
public string Value {
    get { return ValuesField(FieldName); }
    set { ValuesField(FieldName) = value; }
}

VB

Private ValuesField As New System.Collections.Generic.Dictionary(Of String, String)
Public Property Value(ByVal FieldName As String) As String
        Get
            Return ValuesField(FieldName)
        End Get
        Set(ByVal value As String)
            ValuesField(FieldName) = value
        End Set
End Property

XAML

<TextBox Name="TextBox1" VerticalAlignment="Top" Width="120"Text="{Binding Path=Value[MyField],Mode=TwoWay }"  />

3 个答案:

答案 0 :(得分:1)

尝试使用IValueConverter进行绑定

答案 1 :(得分:0)

你的C#有点不稳定 - 你需要方括号:ValuesField[FieldName]

没有理由不能单独绑定到索引集合返回的值,但是对于SL3,您可以传入的值非常有限,以指定要使用的索引。

检查this MSDN article以获取SL3功能,并this link查看SL4中可能的示例。在SL4中,你可以使用字符串索引,但看起来你不能使它们变得动态,它们必须是静态(硬)编码的。请注意,SL具有WPF具有的绑定功能的子集,因此您在WPF中看到的内容无法在SL中应用。

答案 2 :(得分:0)

VB具有创建参数化属性所需的语法,但C#不支持参数化属性。

XAML解析也无法识别参数化属性。

所以问题的简单答案是

在C#中模拟此方法的一种方法是在(现在无参数)属性上公开Type,该属性具有带有所需参数的Indexer。注意与XAML的兼容性,索引器仅限于具有int和/或string类型的单个参数。

使用它可以在绑定中使用类似“Property [parametervalue]”的属性路径。