반응형
Value Conversion Attribute 클래스의 포인트?
이 Atribute의 요점은 무엇입니까?추가한 후에도 가치 오브젝트를 캐스트해야 합니다.
[ValueConversion(sourceType: typeof(double), targetType: typeof(string))]
public class SpeedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var speed = (double)value;
코드 판독만 가능합니까?바인딩 경로를 xaml에서 String으로 변경하면 Visual Studio에서 잘못된 유형에 대한 경고가 표시되지 않고 캐스팅 시에만 예외가 발생하므로 컴파일 중 초기 오류 캐치에서도 아무런 의미가 없습니다.또한 캐스트를 문자열로 변경할 수 있으며 이 Attribute와 충돌하더라도 경고가 발생하지 않습니다.
다음 명령어를 사용할 수 있습니다.ValueConversionAttribute
컨버터에 관여하는 타입을 특정해, 그 정보를 유용하게 사용합니다.WPF의 파이프 값 변환기를 참조해 주십시오.ValueConversionAttribute
.
이 예에서는 여러 컨버터 클래스를 체인으로 하는 방법과 ValueConversion을 사용하여 유형 정보를 다음 컨버터에 전달할 수 있는 방법을 보여 줍니다.
[ValueConversion( typeof( string ), typeof( ProcessingState ) )]
public class IntegerStringToProcessingStateConverter : IValueConverter
{
object IValueConverter.Convert(
object value, Type targetType, object parameter, CultureInfo culture )
{
int state;
bool numeric = Int32.TryParse( value as string, out state );
Debug.Assert( numeric, "value should be a String which contains a number" );
Debug.Assert( targetType.IsAssignableFrom( typeof( ProcessingState ) ),
"targetType should be ProcessingState" );
switch( state )
{
case -1:
return ProcessingState.Complete;
case 0:
return ProcessingState.Pending;
case +1:
return ProcessingState.Active;
}
return ProcessingState.Unknown;
}
object IValueConverter.ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture )
{
throw new NotSupportedException( "ConvertBack not supported." );
}
}
// *************************************************************
[ValueConversion( typeof( ProcessingState ), typeof( Color ) )]
public class ProcessingStateToColorConverter : IValueConverter
{
object IValueConverter.Convert(
object value, Type targetType, object parameter, CultureInfo culture )
{
Debug.Assert(value is ProcessingState, "value should be a ProcessingState");
Debug.Assert( targetType == typeof( Color ), "targetType should be Color" );
switch( (ProcessingState)value )
{
case ProcessingState.Pending:
return Colors.Red;
case ProcessingState.Complete:
return Colors.Gold;
case ProcessingState.Active:
return Colors.Green;
}
return Colors.Transparent;
}
object IValueConverter.ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture )
{
throw new NotSupportedException( "ConvertBack not supported." );
}
}
object IValueConverter.Convert(
object value, Type targetType, object parameter, CultureInfo culture )
{
object output = value;
for( int i = 0; i < this.Converters.Count; ++i )
{
IValueConverter converter = this.Converters[i];
Type currentTargetType = this.GetTargetType( i, targetType, true );
output = converter.Convert( output, currentTargetType, parameter, culture );
// If the converter returns 'DoNothing'
// then the binding operation should terminate.
if( output == Binding.DoNothing )
break;
}
return output;
}
//***********Usage in XAML*************
<!-- Converts the Status attribute text to a Color -->
<local:ValueConverterGroup x:Key="statusForegroundGroup">
<local:IntegerStringToProcessingStateConverter />
<local:ProcessingStateToColorConverter />
</local:ValueConverterGroup>
그것은 단지 주석일 뿐이다.
MSDN:
IValueConverter 인터페이스를 구현할 때는 ValueConversionAttribute Atribute Atribute Atribute를 사용하여 구현을 꾸미는 것이 좋습니다.
'개발도구'가 그 정보로 무엇을 할 수 있을지는 모르겠지만...
언급URL : https://stackoverflow.com/questions/9628859/the-point-of-valueconversionattribute-class
반응형
'source' 카테고리의 다른 글
bash 스크립트를 사용하여 모든 git 브랜치를 반복하는 방법 (0) | 2023.04.14 |
---|---|
취소선 텍스트를 사용하여 UILabel을 작성하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
SQL Server:CLR이 활성화 되어 있는지 확인하려면 어떻게 해야 합니다. (0) | 2023.04.14 |
새 탭 추가 버튼(+)이 있는 TabControl (0) | 2023.04.14 |
프로세스 ID를 취득하여 nohup 프로세스를 종료하려면 어떻게 해야 합니까? (0) | 2023.04.14 |