IValue转换器:ConvertBack - String to Object

时间:2011-05-03 16:32:31

标签: c# wpf data-binding object ivalueconverter

我可以转换为从对象到文本框的工作。但我在转换时有点亏。非常感谢任何领导或帮助。

 [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 个答案:

答案 0 :(得分:3)

一般来说:你不能假设每次转换都是无损的,尤其是ToString通常是完全相反的,除非你的对象非常简单,否则你将无法重建它。

简单的例子,将数字转换为数字和:2584 -> 19,向后转换是不确定的,因为唯一的映射只是单向的。数字总和为19的数字相当多,但2584只有一位数。

答案 1 :(得分:1)

尝试一下:

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;

答案 2 :(得分:1)

确实是H.B.说,你为什么要尝试在文本框对象和字符串之间进行转换?看起来您可能需要查看您的设计 - 其名为 value 转换器是有原因的!如果你真的想这样做,请查看类序列化 - 序列化为MemoryStream并反序列化为对象。您也可以从字符串反序列化(http://stackoverflow.com/questions/2347642/deserialize-from-string-instead-textreader),但为什么要打扰,因为您不想显示那种字符串?如果由于某些疯狂的原因你想要序列化为一个字符串,你可以将内存位置设置为0并将内存流传递给StreamReader,然后调用StreamReader.ReadToEnd()。ToString()。