2013-11-28 31 views
1

我有一個文本框綁定到一個屬性(最終很多這些)。該屬性是一個數值。當顯示這個數值時,我想給它增加一個單位(如V,mV,C等),並可選擇縮放(例如3200mV = 3.2V)。目前我正在使用一個值轉換器並提供一個單位作爲轉換器參數,但是我仍然需要一個轉換器將其傳回。c#wpf IValueConverter和屬性屬性

但是我想要做的是添加一個自定義屬性到一個屬性與所需的規模和單位。事情是這樣的:

[Unit("mV")] 
[Scale(0.1)] 
public uint MyProperty 
{ 
    get{ return myProperty} 
    set 
    { 
     if(value==myProperty) 
     return; 
     myProperty=value; 
     OnPropertyChanged("MyProperty");  
    } 
} 

但是我不知道它怎麼可能這樣的信息傳遞給轉換器(如果它甚至有可能)?

或者有什麼其他的可能性,以一種很好的方式做到這一點?

回答

1

要從UnitAttribute和ScaleAttribute獲取屬性值,值轉換器必須使用Reflection,並且必須知道這些屬性所在類的名稱以及要轉換的特定屬性的名稱。

您可以爲類名稱添加一個DependencyProperty到你的價值轉換器並使用它,如下所示:

<UserControl.Resources> 
    <local:MyUnitConverter x:Key="myUnitConverter" ClassName="MyNamespace.MyClass" /> 
</UserControl.Resources> 

,然後使用轉換器的性能,也傳遞性質爲ConverterParameter的名稱:

<TextBlock Text="{Binding MyProperty, Converter={StaticResource myUnitConverter}, 
    ConverterParameter=MyProperty}" /> 

然後應該可以從轉換器找到屬性中使用的值並相應地轉換屬性。

public class MyUnitConverter : DependencyObject, IValueConverter 
{ 
    // add dependency property ClassName as string 

    public object Convert(object value, Type targetType, object parameter, CultureInfo info) 
    { 
     // use dependency property ClassName and (string)parameter 
     // as property name to get the attribute values using Reflection. 
    } 
} 
+0

不錯。這實際上回答了我的另一個問題:如何在需要轉換回來時獲取目標屬性的類型。 – xnonamex

+0

@xnonamex我的回答並不完整,但它應該引導您朝着正確的方向前進。關鍵是將信息傳遞給值轉換器對象。我希望你知道如何使用Reflection獲得屬性值。如果沒有,我相信你可以在這個網站上找到答案。 – helb

+0

我會最終弄清楚......將研究它。只要我知道在哪個方向思考應該沒問題。 :) – xnonamex