2009-07-30 6 views
2

Silverlight XAML은 바이트 데이터 형식을 지원합니까?

여기 내 데이터 형식입니다 :

using System; 

namespace UI 
{ 
    public class AddressType 
    { 
     public byte ID { get; set; } 
     public string Name { get; set; } 
    } 
} 

using System.Collections.ObjectModel; 

namespace UI 
{ 
    public class AddressTypes : ObservableCollection<AddressType> 
    { 
    } 
} 
 
Here is my XAML from my UserControl.Resources section of my page: 
< < 로컬 : AddressTypes x : 이름 = "AddressTypesList">

 <local:AddressType ID="0" Name="Select"/> 
    <local:AddressType ID="1" Name="Office"/> 
    <local:AddressType ID="2" Name="Shipping"/> 
    <local:AddressType ID="3" Name="Warehouse"/> 
    <local:AddressType ID="4" Name="Home"/> 
    <local:AddressType ID="5" Name="Foreign"/> 

</local:AddressTypes> 

XAML의 값을 ID 속성에 할당하려고하면 AG_E_PARSER_BAD_PROPERTY_VALUE [Line : 10 Position : 35] 오류가 발생합니다. ID 속성의 데이터 유형을 int로 변경하면 모두 잘됩니다. Silverlight가 바이트 데이터 형식을 지원하지 않습니까?

+0

실험 결과에 따르면 아니오라고 말하고 싶습니다. –

+0

흥미로운 질문이지만 꽤 학문적이라고 생각합니다. 가능한 경우 int (또는 값 변환기)를 사용합니다. 나는 당신이 물어 본 질문에 대답하지 않았기 때문에 나의 대답을 지웠다. –

답변

3

지정 바이트 :

이 경우 파서가이 방법으로 지원 바이트를 수행하지만, 당신은 진수 표기법을 사용하여 ID를 지정 또는 같은 요소 표기법이 아닌 속성을 사용하여 속성을 설정하여 테스트 할 수 속성 구문을 사용하는 값이 작동하지 않는 것 같습니다. 그러나 속성 요소 구문을 사용하여 바이트 값을 지정할 수 있습니다.

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

를 사용해서 이렇게 같은 바이트 속성을 지정 할 수 있어야한다 : 에서 다음 xmlns 선언 추가

<local:AddressType Name="Select"> 
    <local:AddressType.ID> 
    <sys:Byte>0</sys:Byte> 
    </local:AddressType.ID> 
</local:AddressType> 

이 비록 종류의 혼란이다, 그래서 당신이 할 수있는 무엇을 구현입니다 사용자 정의 유형 변환기를 사용하고 해당 유형 변환기를 사용하는 특성으로 특성을 표시하십시오.

TypeConverter가 같은 것을 보일 것입니다 :

public class ByteTypeConverter : TypeConverter 
{ 
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) 
    { 
     return sourceType == typeof(string); 
    } 

    public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) 
    { 
     if (value is string) 
     { 
      return Byte.Parse(value as string); 
     } 
     else 
     { 
      return base.ConvertFrom(context, culture, value); 
     } 
    } 
} 

을 그리고 당신은 다음이 형식 변환기에 속성 포인트 있도록 클래스를 수정할 :

public class AddressType 
{ 
    [TypeConverter(typeof(ByteTypeConverter))] 
    public byte ID { get; set; } 
    public string Name { get; set; } 
} 

지금 당신이 사용할 수 있어야합니다 일반 속성 속성 구문 :

<local:AddressType ID="0" Name="Select"/> 
0

다운로드 가능한 런타임 공간을 절약하기 위해 XAML 파서는 XAML의 숫자에 대한 정수만 지원하므로 사용자가보고있는 동작을 상상해보십시오. XAML 파서가 XAML을 구문 분석하는 방법을 알기 위해서는 먼저 입력을받는 코드를 이해해야합니다. 실제로 고려해야하는 코드가 아니므로 항상 int.Parse과 같은 구문을 사용하여 구문 분석 할 수 있습니다.

<local:AddressType Name="Select"> 
    <ID>0x00</ID> 
</local:AddressType> 
관련 문제