سؤال

خلفية: خبرة من 3 إلى 4 أسابيع في Silverlight3/C#/.Net وحوالي 3 أيام من الخبرة مع مفهوم خدمات RIA.(معظم أسئلتي السابقة حتى الآن يجب أن توضح السبب)

أقوم بإجراء اختبار تنفيذ لخدمات RIA من Microsoft باستخدام Silverlight3.هذا جزء من إثبات المفهوم الذي يجب أن أقوم به للعميل.لذا فهو أساسي جدًا.لقد اكتشفت كيفية إنشاء مشروع Silverlight3 باستخدام خدمات RIA وما إلى ذلك.لذا فإن تمرير وإرجاع السلاسل والنصوص لا يمثل مشكلة في الوقت الحالي.

لكنني أحتاج إلى إرجاع ArrayList من فئة خدمة المجال الخاصة بي إلى عميل SL3 الخاص بي.ولكن يبدو أن إعادة ArrayList كما هي غير مسموح به.ومعرفتي المحدودة بـ C # لا تساعد في إجراء تحويلات/تحويلات سريعة للكتابة وما إلى ذلك.تحصل هذه الوظيفة من جانب الخادم على ArrayList والتي يجب إعادتها إلى عميل SL3، لذلك يجب أن أفعل شيئًا بها لإرسالها من جانب العميل.

سؤال:هل يعرف أحد ما يجب فعله لـ ArrayList (في c#) للسماح لوظيفة فئة DomainService بإعادتها إلى وظيفة عميل/SL3؟

[ملحوظة: غالبية محاولاتي تنتهي بالخطأ:"عملية الخدمة المسماة 'myFunctionName' لا تتوافق مع التوقيع المطلوب.يجب أن يكون كلا نوعي الإرجاع والمعلمات من نوع الكيان أو أحد الأنواع القابلة للتسلسل المحددة مسبقًا."]

لا تتردد في طلب أي معلومات تشعر أنها ستكون مناسبة.شكرا لكم مقدما.

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

المحلول

أعتذر لعدم نشر الحل الذي وجدته.لقد ألقى الرؤساء عليّ المزيد من العمل أكثر مما أستطيع التعامل معه.في البداية كنت أرغب في إرجاع مصفوفات معقدة نوعًا ما من التعليمات البرمجية التي قدمها عميلنا، لكن قيود الجهد والوقت سمحت لي فقط بتحويل القائمة وإرجاعها بشكل صحيح.آمل ان يكون هذا ساعدكم بطريقة ما.

جانب العميل :كود Silverlight في MainPage.xaml.cs لدي اتصال لاسترداد قائمة البيانات من جانب الخادم، لعرضها في القائمة المنسدلة.

// Function called on load of the SL interface
// 'slayer' is an object of the Domain Service Class server-side
// 'this.gidSessionNumber' is just a number used in the demo to represent a session
public void loadPaymentTypeComboBox()
{
    InvokeOperation<IEnumerable<string>> comboList = sLayer.getPaymentTypeCombo(this.gidSessionNumber);
    comboList.Completed += new EventHandler(popPaymentCombo_complete);
}//function loadAllComboBoxes

// Event handler assigned
public void popPaymentCombo_complete(object sender, EventArgs e)
{
    InvokeOperation<IEnumerable<string>> obj = (InvokeOperation<IEnumerable<string>>)sender;
    string[] list = obj.Value.ToArray();

    // 'paymentTypeDropdown' is the name of the specific comboBox in the xaml file
    paymentTypeDropdown.IsEnabled = true;

    // Assign the returned arrayList as itemSource to the comboBox
    paymentTypeDropdown.ItemsSource = list;
}

في فئة خدمة المجال لدي الوظيفة المرتبطة:

    [ServiceOperation]
    public List<string> getPaymentTypeCombo(string gidNumber)
    {
        // Build objects from libraries provided by our client
        SDT.Life.LifeCO.clsSystemCreator.CreateSysObjects(gidNumber);
        this.lobjSys = SDT.Life.LifeCO.clsSystemCreator.GetSysObject(gidNumber);

        // Rtrieve the ArrayList from the client's code       
        clsTextList comboList= this.lobjSys.lstPaymentType_PaymentQueue;

        // Get the length of the returned list
        int cnt= (int)comboList.Count();

        // Create the List<string> which will be populated and returned
        List<string> theList= new List<string>();

        // Copy each element from the clsTextList to the List<string>
        for (int i = 0; i < cnt;i++)
        {
            string status= comboList.Item(i).Description;
            theList.Add(status);
        }

        // return the newly populated List<string>
        return theList;
    }//end function getPaymentTypeCombo

نصائح أخرى

لست متأكدًا من أنه يمكنك إرجاع ArrayList.أعتقد أنك يجب أن تفكر في إرجاع IEnumerable بدلاً من ذلك مما سيجعل الخدمة تتعرف على الطريقة كطريقة للقراءة.

إذا كان لديك قائمة أو ObservableCollection وترغب في ربطها بـ ItemControl مثل ComboBox، فيمكنك تعيين ItemsSource على ItemControl الخاص بك.استخدم خاصية DisplayPath في ItemControl لتعيين الخاصية التي ترغب في عرضها أو استخدام DataTemplate.

<ComboBox>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <TextBlock Text={"Binding Path=Property1"}/>
        <TextBlock Text={"Binding Path=Property2"}/>
        <TextBlock Text={"Binding Path=Property3"}/>
      </StackPanel>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top