Frage

Hintergrund: 3-4 Wochen Erfahrung in Silverlight3 / C # / Net und über 3 Tage im Wert mit dem RIA Services-Konzept.. (Die meisten meiner bisherigen Fragen auf dem neuesten Stand sollte erklären, warum)

Ich mache einen Test Implementierung von Microsofts RIA-Diensten mit Silverlight3. Dies ist Teil eines Proof of Concept i für einen Kunden zu tun haben. So ist es sehr einfach. Ich habe herausgefunden, wie das Silverlight3 Projekt bauen Dienste RIA etc. So vorbei und Streicher und int der ist kein Problem im Moment zurück.

Aber ich benötige eine Arraylist von meiner Domain Service Class mein SL3 Client zurückzukehren. Aber es scheint, eine Arraylist zurück vorbei wie, ist nicht zulässig. Und mein begrenztes Wissen von C # Hilfe nicht schnell type casting / convertions / etc zu tun. Diese serverseitige Funktion bekommt eine Arraylist, die den SL3 Client zurückgegeben werden muß, so dass ich etwas damit zu tun, es Client-Seite zu senden.

Frage: Hat jemand wissen, was zu einer Arraylist getan werden soll (in c #) einer Domainservice-Klasse-Funktion, damit sie zu einer rufenden Client / SL3 Funktion zurück?

[ Hinweis: die Mehrheit meiner Versuche enden in den Fehler. „Service Operation namens‚myFunctionName‘entspricht nicht der benötigten Signatur Beide Rückgabe- und Parametertypen müssen ein Entitätstyp sein oder eines der vordefinierten serializable-Typen. "]

Bitte fühlen Sie sich frei, alle Informationen, die Sie wäre angemessen, das Gefühl zu beantragen. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich entschuldige mich für die Lösung nicht veröffentlichen i gefunden. Boss warf mich mehr Arbeit, als ich bewältigen kann. :) Bitte beachten Sie meine Lösung ist vielleicht die beste nicht sein, aber da mein Wissen in SL und RIA-Dienste sind so neu, ich denke, es entschuldigt werden kann. Am Anfang wollte ich von unseren Kunden zur Verfügung gestellt zurück ziemlich komplizierte Anordnungen aus dem Code zu übergeben, aber Aufwand und Zeitgründen konnte ich nur bekommen sie Recht vor, eine Liste zu konvertieren und zurück. Hoffe, das hilft in gewisser Weise.

Client-Seite: Silverlight-Code in den MainPage.xaml.cs ich einen Anruf haben eine Liste von Daten von der Server-Seite abzurufen, in einer Dropdown-Liste angezeigt werden

.
// 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;
}

In der Domain Service Class i haben die zugehörige Funktion:

    [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

Andere Tipps

Nicht sicher, dass Sie eine Arraylist zurückkehren können. Ich denke, man sollte denken eine IEnumerable stattdessen über die Rückkehr, die der Dienst das Verfahren als Read-Methode erkennen machen.

Wenn Sie eine Liste oder ObservableCollection haben und wollen es zu einem ItemControl wie ComboBox binden, können Sie die Itemssource auf ItemControl gesetzt. Verwenden Sie die DisplayPath Eigenschaft auf der ItemControl die Eigenschaft festlegen, die Sie anzeigen möchten, oder eine Datatemplate verwendet werden.

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top