2013-06-18 2 views
2

Может ли кто-нибудь дать мне несколько советов о том, что я могу делать неправильно?WPF string to double converter

так у меня есть TextBlock в XAML

<TextBlock> 
    <TextBlock.Text> 
    <Binding Source="signal_graph" Path="GraphPenWidth" Mode="TwoWay" Converter="{StaticResource string_to_double_converter}" /> 
    </TextBlock.Text> 
</TextBlock> 

, который прилагается к собственности GraphPenWidth signal_graph в (типа двойного). Преобразователь объявлен в качестве ресурса в ресурсах приложения и выглядит следующим образом:

public class StringToDoubleValueConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     double num; 
     string strvalue = value as string; 
     if (double.TryParse(strvalue, out num)) 
     { 
     return num; 
     } 
     return DependencyProperty.UnsetValue; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     return value.ToString(); 
    } 
    } 

То, что я думал, что произойдет в том, что при запуске значение свойства выбирается конструктором по умолчанию будет распространяться на TextBlock, а затем будущее Изменения в текстовом блоке обновили бы график, когда текстовый блок оставил фокус. Однако вместо этого начальная нагрузка не обновляет текст текстового блока, а изменения в тексте текстового блока не влияют на значение ширины пера графа.

не стесняйтесь спрашивать о дальнейшем уточнении.

+4

Вы это неправильный путь: Вам нужен DoubleToStringConverter, а не StringtoDoubleConverter. – Shlomo

ответ

2

Вам не нужен конвертер для этого, используйте метод .ToString() в свойстве.

public string GraphPenWidthValue { get { return this.GraphPenWidth.ToString(); } } 

В любом случае здесь является Standart String Значение Преобразователь:

[ValueConversion(typeof(object), typeof(string))] 
    public class StringConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value == null ? null : value.ToString(); 
     } 

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