В Silverlight вы можете привязываться к свойству, содержащему параметр? Например, следующее, похоже, не работает. Я что-то упустил или это невозможно?
С#
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; }
}
В. Б.
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 }" />
Попробуйте использовать IValueConverter для привязки
VB имеет синтаксис, необходимый для создания параметризованного свойства, но С# не поддерживает параметризованные свойства.
Анализ XAML также не распознает параметризованные свойства.
Итак, простой ответ на ваш quesiton: Нет.
Один из способов эмуляции этого в С# заключается в том, чтобы вывести Type на свойство (nowlessless), которое имеет Indexer, который принимает требуемые параметры. Примечание для совместимости с XAML индексатор ограничивается наличием единственного параметра типа int и/или строки.
С этим вы можете использовать путь свойства, например "Свойство [parametervalue]" в привязке.
Ваш С# немного неуловимый - вам нужны квадратные скобки: ValuesField[FieldName]
Нет причин, по которым вы не можете привязываться к значению, возвращаемому из индексированной коллекции, но с SL3 вы очень ограничены значением, которое вы можете передать, чтобы указать используемый индекс.
Отметьте эту статью MSDN для возможностей SL3 и this link для примера того, что возможно в SL4. В SL4 вы получаете возможность использовать строковые индексы, но не похоже, что вы можете сделать их динамическими, они должны быть статически (жестко) закодированы. Обратите внимание, что SL имеет подмножество способности связывания, которое имеет WPF, поэтому то, что вы видите в WPF, не может быть обязательно применено в SL.