2013-11-28 5 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