Есть проблема с привязкой combobox в silverlight с помощью wcf - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь связать комбинированный список в Silverlight, используя WCF. я пробовал ниже код, но Comobobox не отображает какие-либо значения ?? .. код следующим образом ..

 public class Appsrvvice : IAppsrvvice
 {

    public void DoWork()
    {
     }

    public List<fillupcombox> fillup()
    {
        List<string> x=new List<string>();
        List<string> y=new List<string>();

        string connectionstring = "server=localhost;User Id=root;password=root;Persist Security Info=True;database=mv_store";
        string msg;

         msg = "";
        MySqlConnection con = new MySqlConnection(connectionstring);
        MySqlDataAdapter ad = new MySqlDataAdapter("select Product_Name,Product_Id from product_detail Order by Product_Name", con);

        DataTable dt = new DataTable();

        try
        {
            ad.Fill(dt);
          //  return dt;

            for(int i=0;i<dt.Rows.Count;i++)
            {
                x.Add(dt.Rows[i]["Product_Name"].ToString());
                y.Add(dt.Rows[i]["Product_Id"].ToString());
            }

        }

        catch (Exception e)
        {

            msg = e.Message;
            return null;

        }
        finally
        {
            ad.Dispose();
        }


        return new List<fillupcombox>()
        {
            new fillupcombox()
            {
                Texts=x,
                Valuess=y
            }
        };
    }
}



[ServiceContract]
public interface IAppsrvvice
{

    [OperationContract]
    void DoWork();

    [OperationContract]
    List<fillupcombox> fillup();

}

[DataContract]
public class fillupcombox
{

    [DataMember]
    public List<string> Texts
    {
        get;
        set;
    }

    [DataMember]
    public List<string> Valuess
    {
        get;
        set;

    }

}

Вот мой код главной страницы

 public MainPage()

 {
        InitializeComponent();

        ServiceReference1.AppsrvviceClient obj = new ServiceReference1.AppsrvviceClient();
        obj.fillupCompleted += new EventHandler<ServiceReference1.fillupCompletedEventArgs>(fillupCompletedp);
        obj.fillupAsync();



    }


    public void fillupCompletedp(object sender, ServiceReference1.fillupCompletedEventArgs e)
    {


         comboBox1.ItemsSource =e.Result;


    }


<UserControl x:Class="SilverlightApplication1comobobox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
    <ComboBox Height="23"  HorizontalAlignment="Left" Margin="70,67,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />
</Grid>

Нет значений заполняется в выпадающем списке. Есть идеи, где я не прав?

Ответы [ 3 ]

1 голос
/ 23 июня 2012

У меня была такая же проблема, поэтому я решил сделать ее как можно более простой.

public List<string> GetTypes()
    {
        NissanDBEntities niss = new NissanDBEntities();
        return niss.cars.Select(m => m.type).Distinct().ToList();
    }


public Clients()
    {
        InitializeComponent();
        NissanSvc.NissanServiceClient proxy = new Nissan.NissanSvc.NissanServiceClient();
        proxy.GetTypesCompleted += new EventHandler<NissanSvc.GetTypesCompletedEventArgs (proxy_GetTypesCompleted);
        proxy.GetTypesAsync();
    }

    void proxy_GetTypesCompleted(object sender, NissanSvc.GetTypesCompletedEventArgs e)
    {
        this.cmbType.ItemsSource = e.Result;
    }

Надеюсь, это поможет.

1 голос
/ 12 января 2012
comboBox1.ItemsSource = e.Result;
0 голосов
/ 13 января 2012

Вы возвращаете объект с 2 списками.клиент не может определить, как их отображать.Я предлагаю вам изменить структуру в список / массив элементов, скажем:

class Pair
{
    public string Key;
    public string Value;
}

и вернуть массив Pairs из службы.умеет отображать пару:

<ComboBox ...>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                 <TextBlock Text="{Binding Key}"/>
                 <TextBlock Text="{Binding Value}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
...