Различный формат строки для каждого элемента в списке - PullRequest
1 голос
/ 24 сентября 2010

Я пытаюсь привязать список объектов к списку.Каждый объект отображается в отдельном текстовом блоке.Но проблема в том, что каждый элемент должен отображаться в различном формате (например, дата, валюта и т. Д.).Я хочу сохранить формат в свойстве объекта ant, а затем установить формат в том же выражении привязки, где установлено значение.Все примеры, которые я видел до сих пор, показывают, как установить формат строки путем его жесткого кодирования:

<TextBlock Text="{Binding Value, Mode=OneWay, StringFormat=\{0:n3\}}"/>

Интересно, есть ли способ связать свойство формата строкикак это:

<TextBlock Text="{Binding Value, Mode=OneWay, StringFormat={Binding myFormat}}"/>

Или, возможно, это может быть достигнуто с помощью преобразователей значений.Но опять же, возможно ли привязать какое-либо свойство к параметру конвертера следующим образом:

<TextBlock Text={Binding Value, Converter={StaticResource myConverter}, ConverterParameter={Binding myFormat}}"/>

1 Ответ

1 голос
/ 24 сентября 2010

Используйте преобразователь значений, который принимает весь объект, и у этого преобразователя есть доступ к свойствам Value и Format объекта для генерации желаемой строки.

Пример: -

 public class ValueFormatConverter : IValueConverter
 {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        IValueFormat vf = value as IValueFormat;
        if (vf != null)
            return String.Format("{0:" + vf.Format + "}", vf.Value);
        else
            throw new NotSupportedException("value does not implement IValueFormat");
    }
 }

Пусть объекты в списке реализуют IValueFormat: -

public interface IValueFormat
{
    object Value { get; }
    string Format { get; }
}

В качестве альтернативы

Поскольку ваш объект знает как свое значение, так и используемый формат.чтобы представить значение, почему бы просто не добавить в объект только для чтения FormattedValue свойство типа string?

Если вы реализуете INotifyPropertyChanged, просто убедитесь, что вы используете PropertyChanged для "FormattedValue"всякий раз, когда значение или формат изменился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...