IValue Converter: ConvertBack - строка в объект - PullRequest
0 голосов
/ 03 мая 2011

Я могу получить преобразование для работы из объекта в текстовое поле. Но я немного теряюсь при конверсии. Любое руководство или помощь очень ценится.

 [ValueConversion(typeof(Object), typeof(String))] 
 public class DataConverter : IValueConverter
 {
    // This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, object parameter, CultureInfo   culture)
    {
      BasePar data = (BasePar)value;
      return data.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      string strValue = value as string;
      Object objString = (Object)strValue;

      return objString;
    }
 }

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

В общем и целом: вы не можете предполагать, что каждое преобразование без потерь, особенно ToString, как правило, совершенно противоположное, если ваш объект не очень прост, вы не сможете восстановить его.

Простой пример,преобразовать число в его цифру-сумму: 2584 -> 19, обратное преобразование не определено, поскольку уникальное отображение является только односторонним.Существует довольно много чисел с цифрой 19, но 2584 имеет только одну цифру.

1 голос
/ 03 мая 2011

Действительно, что сказал HB, почему вы все равно пытаетесь преобразовать объект textbox в строку?Похоже, вам, возможно, придется взглянуть на свой дизайн - его причина называется значение конвертер!Если вы действительно хотите сделать это, посмотрите на сериализацию класса - сериализуйте в MemoryStream и десериализуйте в объект.Вы можете десериализовать из строки (тоже /1835284/deserializovat-iz-stroki-vmesto-textreader), но зачем беспокоиться, так как вы все равно не хотите отображать такую ​​строку?и передать поток памяти в StreamReader, а затем вызвать StreamReader.ReadToEnd (). ToString ().

1 голос
/ 03 мая 2011

Попробуйте что-нибудь вроде:

var textBoxValue = value as string;
if(textBoxValue != null) {
    // Create BasePar instance, setting the textBoxValue as a property value or whatever and return it
}
return DependencyProperty.UnsetValue;
...