2013-06-18 137 views
2

有人可以給我一些提示,我可能做錯了什麼?WPF字符串到雙倍轉換器

所以我在XAML

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

一個正文塊,其附接至signal_graph的GraphPenWidth屬性(double類型的)。該轉換器被聲明爲在應用程序的資源的資源,看起來像這樣:

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(); 
    } 
    } 

我想過會發生的是,在啓動時默認的構造選擇的屬性值將被傳播到文本塊,並且將來文本塊更改會在文本塊保持焦點時更新圖形。但是,初始加載並不會更新文本塊的文本,而對文本塊的文本所做的更改對圖形的筆寬度值沒有影響。

隨時要求進一步澄清。

+4

你有錯誤的方式:你需要一個DoubleToStringConverter,而不是一個StringtoDoubleConverter。 – Shlomo

回答

2

不需要轉換器爲此,請在屬性處使用.ToString()方法。

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

反正這裏是一個斯坦達特字符串值轉換器:

[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(); 
     } 
    }