2010-04-14 65 views
2

在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 }" /> 

回答

1

尝试使用IValueConverter进行绑定

+0

您可以扩展如何做到这一点吗? – 2011-03-03 15:08:58

0

你的C#是有点靠不住的 - 你需要方括号:ValuesField[FieldName]

没有理由ŧ您不能单向绑定从索引集合返回的值,但对于SL3,您可以通过指定索引来使用的值非常有限。

检查this MSDN article为SL3功能,和this link为SL4中可能的一些例子。在SL4中,您可以使用字符串索引,但它看起来不像可以使它们变成动态的,它们必须静态(硬编码)编码。请注意,SL具有WPF所具有的绑定功能的子集,因此您在WPF中看到的内容不一定适用于SL。

0

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

XAML解析也不能识别参数化的属性。

所以你的问题的简单答案是

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

因此,您可以在绑定中使用属性路径,如“Property [parametervalue]”。

相关问题