سؤال

وهنا هو بلدي نوع البيانات:

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 س: اسم = "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 [الخط: 10 الوظيفة: 35] الخطأ. إذا قمت بتغيير نوع بيانات الخاصية ID لكثافة العمليات، كل شيء على ما يرام. لا سيلفرلايت دعم نوع البيانات بايت؟

هل كانت مفيدة؟

المحلول

والقيم تحديد بايت باستخدام بناء الجملة السمة لا يظهر للعمل. ومع ذلك، فمن الممكن لتحديد القيم بايت باستخدام بناء الجملة عنصر الملكية. إضافة إعلان 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"/>

نصائح أخرى

وأتصور أنه من أجل توفير مساحة في وقت التشغيل للتحميل، محلل XAML يعتمد فقط صحيحة لأعداد في XAML، وبالتالي سلوك كنت ترى. من أجل محلل XAML لمعرفة كيفية تحليل XAML أنها تحتاج إلى فهم التعليمات البرمجية التي تأخذ المدخلات أولا - قد يكون ذلك لأنها لا تأخذ هذا الواقع بعين الاعتبار، وبالتالي يوزع دائما باستخدام شيء من هذا القبيل int.Parse

في حالة محلل يفعل بايت دعم ولكن ليس بهذه الطريقة، هل يمكن اختباره لتحديد ID باستخدام تدوين عرافة أو تعيين الخاصية باستخدام تدوين عنصر بدلا من السمة كما في:

<local:AddressType Name="Select">
  <ID>0x00</ID>
</local:AddressType>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top