代码之家  ›  专栏  ›  技术社区  ›  Carl Rippon

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

  •  2
  • Carl Rippon  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  1
  •   MagicMax    15 年前

    尝试使用ivalueconverter进行绑定

        2
  •  0
  •   slugster Joey Cai    15 年前

    你的C有点古怪-你需要方括号: ValuesField[FieldName]

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

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

        3
  •  0
  •   AnthonyWJones    15 年前

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

    xaml parse也无法识别参数化属性。

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

    在C中模拟这种情况的一种方法是在(现在是无参数的)属性上公开类型,该属性具有接受所需参数的索引器。注意:为了与xaml兼容,索引器仅限于具有int和/或string类型的单个参数。

    这样,您就可以在绑定中使用类似“property[parametervalue]”的属性路径。