Silverlight 3 и IMultiValueConverter - PullRequest
       27

Silverlight 3 и IMultiValueConverter

1 голос
/ 21 июля 2009

Как вы, возможно, знаете, Silverlight 3 не поддерживает IMultiValueConverter и ... он мне очень нужен. Прокси-сервер веб-службы, который определяет структуру классов, которые мне нужно отображать в моем интерфейсе. Класс определения объекта имеет несколько свойств массива, таких как string [], int [] и т. Д. Когда я связываю эти свойства с TextBlock, свойство Text для TextBlock становится System.String [] или System.Int []. Вместо этого я хотел бы видеть список строк или чисел, разделенных запятой.

Я думал об использовании IMultiValueConverter, но Silverlight 3 его не поддерживает. Как мне обойти это?

Спасибо

Ответы [ 3 ]

4 голосов
/ 21 июля 2009

Цель IMultiValueConverter - реализовать конвертеры, которые поддерживают множественные привязки (т.е. MultiBinding объекты). В вашем случае это не то, что вам нужно.

Если вы хотите преобразовать массив (например, string[]) в текстовое значение, просто определите нормальный IValueConverter, который это делает. Пусть вас не смущает тот факт, что массив содержит несколько значений .

Вот пример конвертера:

[ValueConversion(typeof(string[]), typeof(string))] 
public class StringArrayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Join(", ", (string[])value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Надеюсь, это поможет.

0 голосов
/ 21 июля 2009

И если вы все еще хотите иметь MultiBinding и IMultiValueConverter, вы можете этот, Колин Эберхардт . Работает очень хорошо.

0 голосов
/ 21 июля 2009

Я не вижу использования многозначного преобразователя в вашем сценарии. Вы можете создать IValueConverter, который принимает Array и возвращает вам строку, разделенную запятой

<TextBlock Text="{Binding ArrayProperty,Converter={StaticResource stringArrayToString}}" ...
...