这是我的数据类型:
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:
&lt; local:AddressTypes x:Name =“AddressTypesList”&gt;
<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 :(得分:3)
使用属性语法指定字节值似乎不起作用。但是,可以使用属性元素语法指定字节值。 添加以下xmlns声明:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
您应该能够像这样指定字节属性:
<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"/>
答案 1 :(得分:0)
我认为为了节省可下载运行时空间,XAML解析器仅支持XAML中数字的整数,因此您看到的行为。为了让XAML解析器知道如何解析XAML,它需要首先理解获取输入的代码 - 可能实际上并没有考虑到这一点,因此总是使用{{1}之类的东西进行解析}。
如果解析器支持字节但不支持这种方式,您可以通过使用十六进制表示法指定ID或使用元素表示法而不是属性设置属性来测试它:
int.Parse